One ItemPriceInfo class fits three different pricing schemes. Each calculator uses a different description for the PricingAdjustment added to the ItemPriceInfo.

The priceList property of ItemPriceInfo is set to the priceList that was actually used to calculate it. This is nullable since other calculators other than those mentioned here will not set this. The ItemPriceCalculator is responsible for setting this value.