Let's consider a simple framework to allow additional prices for a setup and reconfiguration by parts. We would also like to be able to display a description/invoice of parts. This framework will be more than a simple select from a product list; it should allow us to ensure that a valid configuration is built. Let's start by considering the major entities:
Parts: A part is an entity that may be sold.
All parts consume and provide resources.
All parts have a name.
All parts have a description.
All parts have a price (either fixed or set by an algorithm).
Complex parts may be composed of other parts.
Resources: A resource is any entity that is provided or consumed by a part.
A resource has a name.
A resource has a quantity.