Assembly and disassembly
I think we should create a new vf:action for assemble and another for disassemble.
Could be other names, like attach and detach.
They might go with a Assembly ProcessType.
An assemble event would be an input to an Assembly process. It could specify a serialized or lot controlled resource (or not). The event would decrement the source resource.
The Assembly process would know all of the assembled inputs by their vf:action, and to disassemble, you could ask the output resource for all of the components that were assembled into it. You could disassemble one selected assembled component, or a function to disassembleAll could be created.
If you had a series of Assembly processes, you might want to identify the end output resource as early as possible, and that resource would basically be both an input and an output from each of the processes after it was identified. This would be useful, for example, where an end user wanted specific components for their end product.
For example, if Lynn specifies some particular components for her semi-custom-built computer, before the process chain or assembly line gets to the optional components, the "stream resource" would be identified as "Lynn's computer", and it would go through the next set of processes and get the selected components.
It would also be possible to recursively follow the IPO tree from the output resource as root and find all of the various assembled components along the tree. That treatment would not require identifying the output resource until the end.
I think anything like this, where you want to identify the particular inputs for a particular option, requires one process = one output. So if you had an assembly line, each station on the line could be one process for one output. The next output at the same station could come out of a different process.
Alternatively, the whole assembly line could be modeled as one process for each output product.
Which process scope to choose would depend on where in the line the end product could be identified, and whether after that it's worth defining a separate process for each station on the line.
Please suggest improvements.