We will soon need Rule._isProfitAndLossMovement(movement) method. How to recognize if a given movement is a profit and loss movement (i.e. quantity comes from nowhere) or not?
for a kind of trade rule
If the rule is a kind of trade rule, you can recognize a profit and loss movement because its source or destination is None.
for a kind of production rule
If the rule is a kind of production rule, it is more difficult to recognize.
It is probably required to add a trade phase for "profit and loss" in order to recognize "profit and loss" movement and to use BPM to define how to gather profit and loss movements.