...
A part of the design contract of OrderableProduct.canFulfil(OrderableProduct) is that the Dispensable between both OrderableProduct's is the same. In fulfilling this contract, when a TradeItem is associated to a GlobalProduct, that contract must enforce that the Dispensable between the two is the same. e.g. if a GlobalProduct Ibuprofen has Dispensable A, and a its TradeItem Advil has Dispensable B, then logically A.equals(B) is true.