using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public static void Main()
var payments = new List<Payment>
new Payment { TotalAmount = 3000m, UkWorkdayCount = 15, ForeignWorkdayCount = 5 },
new Payment { TotalAmount = 1281.50m, UkWorkdayCount = 3, ForeignWorkdayCount = 18 },
new Payment { TotalAmount = 250m, UkWorkdayCount = 31, ForeignWorkdayCount = 0 },
new Payment { TotalAmount = 50.63m, UkWorkdayCount = 0, ForeignWorkdayCount = 4 },
var totalTaxableAmount = CalculateUkTaxableAmount(payments);
Console.WriteLine(string.Format("Total UK taxable amount is: {0} GBP", totalTaxableAmount));
public static decimal CalculateUkTaxableAmount(List<Payment> payments)
payments.ForEach(pay => {
if (pay.TotalAmount < 0){
throw new ValidationException("Invalid payment. TotalAmount is lower than zero");
int allWorkingDays = pay.ForeignWorkdayCount + pay.UkWorkdayCount;
decimal payForADay = pay.TotalAmount / allWorkingDays;
result += (payForADay * pay.UkWorkdayCount);
return (decimal)System.Math.Round(result,2);
public decimal TotalAmount { get; set; }
public int UkWorkdayCount { get; set; }
public int ForeignWorkdayCount { get; set; }