public static void Main()
decimal InsuredAmt=600000;
var InsuredDate= Convert.ToDateTime(dd);
decimal TopUpAmount=200000;
decimal InsuranceRate=1.5M;
var result= GetTopUpInsuranceAmount(InsuredAmt,PrevTenure,InsuredDate,TopUpAmount,InsuranceRate);
Console.WriteLine(result);
public static decimal GetTopUpInsuranceAmount(decimal InsuredAmt, int PrevTenure, DateTime InsuredDate, decimal TopUpAmount, decimal InsuranceRate)
var result = new decimal();
var grossPremium = InsuredAmt * (InsuranceRate/100);
var stampDuty = (InsuredAmt * 15) / 10000;
var naicomLevy = grossPremium / 100;
var netPremium = grossPremium - stampDuty - naicomLevy;
var outstandingPolicyTenure = Convert.ToInt32( 12 - Math.Ceiling(DateTime.Now.Subtract(InsuredDate).TotalDays/30));
var refundablePremium = Convert.ToDecimal(outstandingPolicyTenure / 12.0) * netPremium;
var newGrossPremium = (InsuredAmt + TopUpAmount) * (InsuranceRate / 100);
var newNetPremium = (newGrossPremium - refundablePremium);