Calculating business logic
There's two things that I'm seeing right off the bat.


Don't use "magic integers" where you can be using Enums.  GetDiscounts should probably receive an enum, not an int:

var discVal = GetDiscounts(items, RecordEnums.ProductClassification.Service);
You don't need to Select then Max.  Just using Max will give you the desired outcome.

decimal highestContractTerm = items.Where(x =&gt; x.ProductTypeId == (int)RecordEnums.ProductClassification.Service).Max(y =&gt; y.RecurringTerm ?? 0;