-
-
Notifications
You must be signed in to change notification settings - Fork 781
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FR]Build routing/Workflows #2817
Comments
Welcome to InvenTree! Please check the contributing docs on how to help.\nIf you experience setup / install issues please read all install docs. |
@martonmiklos the company I work in would probably most likely benefit from such a feature too, I can see it being useful. I can also see it being quite a large undertaking to actually implement! To start the conversation, could you provide a more comprehensive example of what you would like to see? Maybe a simple example product, with some build / manufacturing steps you'd expect to see. Having a clearer idea of what you expect here can help move the discussion forward :) |
Hi @SchrodingersGat
It is indeed. Here is an example manufacturing flow we do now. The product is a resin potted electronics assembly.
Here is how the routing would look like:
I forgot to mention that the routing move operation should be also tied to the Inventree user who performed the step. (Quality wise it could be very important for e.g. at the Visual inspection step.) |
Hi there @martonmiklos ! This would be a significant amount of work. Especially with separating the function out because MES is out of cope for any users. |
Hi @matmair
Ah, I read trough all open issues looking for similars to my suggestion but did not find it (as it was closed). Based on the title of this table (note I am not a native French speaker ;) ) I am under the impression that the #2189 tries to put two things in one hat:
My routing recommendation would cover the second part.
I would recommend to keep it simple:
My basic goals with having routing feature added to InvenTree is to have serial number based traceability and to gain a quick overview of manufacturing status. |
Currently (at my work) we kind of "hack" this in, by using the existing testing framework. For example:
Each of these "tests" is a "process", yes? Perhaps the existing framework could be extended slightly to provide you with the functionality you want, without too much scope creep / feature bloat? What would you be looking for that the current "testing" framework does not offer?
|
Yeah, we are pretty much walking in the similar boot. Our testing framework currently only does a very simple logging: it produces an XML file which contains the result and all of the test steps' parameters (both measured and input parameters like test limits).
If this question is addressed to me: I would like to have a web based overview of a Build order broken down to serial number. Based on the logs we produce I can "mine" these information from the XMLs, but that would require a ground up implementation. Based on my previous experiences it is good to have separation on the following functions:
In our case the test tool is in place and does what I expect from it. We also have tools for data analytics. However for MES we have virtually nothing, and I thought that InvenTree could be expanded to cover our needs. And on the another hand do not just focus on the testing. Other non testing related steps could/should be tracked if the proper routing is defined like manual inspections, packaging, etc. |
Perhaps "testing" is the wrong nomenclature here, then. If the terminology was something like "processes" then this could easily include other steps like inspection, packaging, etc. We currently have "tests" which are called things like "applied label" or "installed wire harness". Not really a "test" specifically, but for our tracking purposes it amounts to the same thing. I think that there is scope to expand what we currently have, as it sounds like there are at least two companies using the "test" framework for more that it was originally intended... |
I tought about this the last few days and I would suggest this architecture @SchrodingersGat @martonmiklos:
This could be extended with optional make image / file upload possible and make the whole thing plugin enabled by:
|
Hi @matmair Frohe Ostern, and many thanks for your proposal! If I understand the proposed models correctly it supports the 'checklist like' approach. I think the order of the manufacturing steps execution is used to be very important in most cases. Even if you can swap steps (like solder wires to the board before the assembly of the connector), it is healthy to rigorously follow a given well-tested procedure because unforeseen side effects could be caused by such a changes. In my head the following lives: Process:
We can have the TreeModel approach here, but I think most manufacturing processes can be flattened quite easily by having a step list with reasonable length. In the systems what I saw the elemental steps like "tighten this screw" was not part of the MES steps, but were part of the work instructions. But anyway ProcessStep:
With this separated pass/fail next approach we could cover cases where backstepping in process is very important. Let's take the following example:
Products failing on HiPOT should never reach FVT because they could harm the test equipment or the worse the operator. (Having HiPOT NextStepOnFail set to HiPOT could enforce it.) StockItemProcessSteps
Supporting both approaches (checklist and ordered process) is an option as well. |
@martonmiklos thank you. All tree models have an order built in by MPTT but I can appreciate where you are coming from. I will create a data model graph today so we can discuss this further. I think we are going into a similar and right direction. |
@martonmiklos @SchrodingersGat I would suggest this structure (new models in green). This way it should be easy to manipulate the processes (moving processes with sub-processes for example). Also we should be able to use a single db-hit to get all needed steps and their states for a number of StockItem or all StockItems in an BO. My suggestion would be to implement a POC and then build out proper UI, APIs, business logic, processes etc. |
Well I was not aware of that the tests are covered already in Inventree. The proposed schema looks good to me! |
@martonmiklos yes the testing / test result framework is already very comprehensive. At my work we have a number of automated / semi-automated build steps which communicate with our InvenTree database via the API. I think that much of the functionality you are asking for does already exist, however maybe it is just called something else. For example you have a build order which is producing 10x PCBA units. Each PCBA might be in a different "stage" of production which could be denoted by the various "test results". There is an argument that these might simply be better labelled as "processes" or "production steps", and this might solve most of what you are looking for... There might be (separately) call for a new model against the build order, which tracks the "state" of the build order. This is different to the process state of each individual build output (stock item) - this is already covered by the existing "test results". This new model (say BuildOrderState) simply tracks the overall state the build is in (Soldering / Testing / Packing) and really depends on the part being manufactured. |
Would a rethink of the nomenclature for the current "test result" architecture be a significant step here? I feel that potentially it is misunderstood / underused. For the Part model we have Test Template, which could be better termed something like Required Process For each StockItem for that Part, we currently have Test Results which may be better termed something like Process Results Open to suggestions here, not sure how other systems do it, the current "Test Result" system was developed very specifically for my own company requirements. |
Hi Oliver, Yes, I educated myself about the test feature and it is really comprehensive! It could cover part of my needs, but adding support for processes (routing) would likely improve it's adoption. I am glad to see the #2860 about further feedback on the plans. One thing came into my mind about this process support topic in general: the ACL. In my previous workplace (what I mentioned before) the following process was implemented to prevent 'blind' retests on failure: From this 'business logic' I would recommend to support only the permission handling OOTB, the failure info providing logic could be implemented as a plugin and the info could be put into the Data field of the StockItemProcessState. I am not 100%-ly familiar yet with the role/group concept of the Inventree, but my current feeling is that we should a feature which would allow the limitation of the Process (steps) execution to specific groups of users. |
Hello, I'd like to help with implementing this feature once the general approach is decided on. |
I think the general approach outlined above should work. Both for legacy reasons and for data warehousing I would like to keep tests and processes seperate. Deleting processes/process states after some time / specific action might be ok but I for my part would like to keep specific part tests for ever. As this is a wanted feature for multiple core devs I think nothing speaks against implementing this soon-ish. @rotofyne how experienced are you with Django / HTML + JS? My suggestion would be that I would implement the models and then everyone in this issue is able to work on all the business logic, UI etc. from there. We have ACL permissions per class/model by the way. |
@matmair regarding deleting of "test results" here is how it works currently; test template - maps to a Part instance, used to define which tests should be performed against stock items of that part. Test result - a specific instance of a test, maps to a stock item. Uses string lookup (not pk) against available test template Deleting or editing templates does not have any impact on existing test results - they persist forever. Personally I think the line between what is a "process" me what is a "test" is blurry. However I think there is a meaningful distinction to be made between processes which apply to the build order itself ("shipped to anodizer") and processes which apply to the build outputs (stock items) (e.g. programmed firmware). Does this distinction make sense? How could we go about encoding that in a meaningful way? |
@matmair I've got limited experience with Django. |
I have thought about this a lot: I think Workflow (in accordance with Slack, MS Teams, ...) might be a better understood feature for this feature then Process |
I agree with the workflow terminology, however I suggest to prefix it with build ("Build workflows") from the introduction. I have some dreams about adding some PLM features (item revision change managment with BoM change redlines, etc.) where we also need to have workflows. |
@martonmiklos that is the reason I left any prefix out. |
@martonmiklos just a bump to say we have been discussing this one, with some large plans "in the works". However we need to get the UI rework out of the way first! |
What does it mean? I did not followed all the discussions lately there were some plans switch to React if I remember correctly? Are you referring to that? |
Yep, referring to the react UI switch :) |
Problem
I know that Inventree is more a storage management system and not MES (Manufacturing Execution System) however supporting build routing would add to it's trait I think in the build management aspects.
Foreword: the terminology I will use below comes from a company where I worked for. We can deviate from this terminology of course.
Most of the manufacturing processes can be broken down into separate individual steps (routing steps). The order of these steps for a single products make up the routing of the product.
Having this information added to the Inventree could help users to better understand the state of their build orders and could be used as a source of making statistic reports for the manufacturing process.
Suggested solution
Add an option to being able to assign routing for Assemblies which trackable.
This option would give the user ability for adding routing steps to the product routing.
Routing step would have an ID, a name and a description.
Two routing steps are special in the routing: the creation step and the completed step.
I know that manufacturing process flows can be more difficult than a simple a->b->c->d order of steps.
For e.g. your product goes for functional testing, if it fails it goes to rework, then goes back to test, if it passes it goes for packaging.
However for the shake of simplicity I would recommend to implementing a straight routing support only. The same approach were used in the factory I used to work for and the exceptions were handled with a simple To move/Reject result for each routing step.
The following information needed to be assigned to the Stock items (where routing is added):
Manufacturing UI changes:
We need to implement a form to move/reject stock items identified by serial number from the current step.
Reports:
We could create an in depth build output completed report where each routing step would be listed with the amount of waiting/rejected products.
We could calculate a first pass yield for each step/the whole routing for a specific build order.
Describe alternatives you've considered
I have not really considered alternatives.
Examples of other systems
Oracle has a MES system which works the described way
Do you want to develop this?
Sure. Let's make a clear concept about what and how needs to be implemented and then I can work on this. I have some level of Python knowledge and used PHP MVC frameworks before (mainly CakePHP). I am looking forward to hear your opinion about this.
The text was updated successfully, but these errors were encountered: