Exemple #1
0
        public ParcelSold CalculateParcelCgt(IReadOnlyParcel parcel, Date disposalDate, int unitsSold, decimal amountReceived)
        {
            decimal costBase;

            var properties = parcel.Properties[disposalDate];

            if (unitsSold == properties.Units)
            {
                costBase = properties.CostBase;
            }
            else
            {
                costBase = (properties.CostBase * ((decimal)unitsSold / properties.Units)).ToCurrency(RoundingRule.Round);
            }

            var capitalGain    = amountReceived - costBase;
            var cgtMethod      = CgtUtils.CgtMethodForParcel(parcel.AquisitionDate, disposalDate);
            var discountedGain = CgtUtils.DiscountedCgt(capitalGain, cgtMethod);

            return(new ParcelSold(parcel, unitsSold, costBase, amountReceived, capitalGain, cgtMethod, discountedGain));
        }