public static void Main()
Program program = new Program();
program.CalculateProRataRefundAmount();
public void CalculateProRataRefundAmount()
DateTime CoverStartDate = Convert.ToDateTime("2021-08-10 00:00:00.000");
DateTime CancellationDate = Convert.ToDateTime("2022-02-12 23:59:59.000");
decimal RetailPrice = Convert.ToDecimal(539.00);
var refundAmount = 0.00M;
Program program = new Program();
int ConsumerMonthElapsed = program.GetConsumerMonthsElapsed(CoverStartDate, CancellationDate);
if (DurationTerm > 0 && ConsumerMonthElapsed > 0)
refundAmount = decimal.Round(RetailPrice * GetProRataDeduction(DurationTerm, ConsumerMonthElapsed), 2);
Console.WriteLine("Cover Start Date: " + CoverStartDate);
Console.WriteLine("Cancellation Date: " + CancellationDate);
Console.WriteLine("Retail Price: " + RetailPrice);
Console.WriteLine("Duration in Months: " + DurationTerm);
Console.WriteLine("Consumer Months Elapsed: " + ConsumerMonthElapsed);
Console.WriteLine("Calculated Refund Amount: " + refundAmount);
public int GetConsumerMonthsElapsed(DateTime coverStartDate, DateTime CancellationDate)
int consumerMonthsElapsed = 0;
DateTime coverStartDateTimeForLoop = coverStartDate;
for (int month = 0; month <= (coverStartDate.Month - CancellationDate.Month); month++)
if (coverStartDateTimeForLoop <= CancellationDate)
coverStartDateTimeForLoop = coverStartDate.AddMonths(month + 1);
return consumerMonthsElapsed;
private decimal GetProRataDeduction(int durationMonths, int elapsedMonths)
return 1 - ((decimal)elapsedMonths / durationMonths);