public void SetHIR(BO.HomeProduct product, BO.HomeInsurancePolicy policy) { bool isAdded = false; if (product.MaximumBuildingValue < policy.BuildingValue) { IsHIR = true; HIRReason = "Building value exceeded the limit"; HIRStatus = 1; isAdded = true; } if (product.MaximumContentValue < policy.ContentValue) { IsHIR = true; HIRReason = HIRReason = isAdded ? HIRReason + ", " + "Content Value exceeded the limit" : "Content Value exceeded the limit"; HIRStatus = 1; isAdded = true; } if (product.MaximumJewelleryValue < policy.JewelleryValue) { IsHIR = true; HIRReason = HIRReason = isAdded ? HIRReason + ", " + "Jewellery Value exceeded the limit" : "Jewellery Value exceeded the limit"; HIRStatus = 1; isAdded = true; } if (product.MaximumTotalValue < policy.BuildingValue + policy.ContentValue) { IsHIR = true; HIRReason = HIRReason = isAdded ? ", " + "Total Value exceeded the limit" : "Total Value exceeded the limit"; HIRStatus = 1; isAdded = true; } }
public decimal GetRenewalDelayedDaysAmount(BO.HomeInsurancePolicyDetails policy, BO.HomeProduct homeProduct, decimal netPremium) { decimal delayedDaysAmount = 0; if (policy.HomeInsurancePolicy.RenewalDelayedDays > 0) { delayedDaysAmount = (netPremium * policy.HomeInsurancePolicy.RenewalDelayedDays) / 365; } return(delayedDaysAmount); }
private void Calculate(BO.HomeInsurancePolicyDetails policy, BO.HomeProduct homeProduct) { //Calcuate the base premium. BuildingPremium = homeProduct.Rate * policy.HomeInsurancePolicy.BuildingValue / 100; ContentPremium = homeProduct.Rate * policy.HomeInsurancePolicy.ContentValue / 100; //Premium = BuildingPremium + ContentPremium; BaseBuildingContentRate = homeProduct.Rate; //Calculate the riot premium. if (policy.HomeInsurancePolicy.IsRiotStrikeDamage.ToString().ToLower() == "y") { BuildingRiot = homeProduct.RiotCoverRate * policy.HomeInsurancePolicy.BuildingValue / 100; ContentRiot = homeProduct.RiotCoverRate * policy.HomeInsurancePolicy.ContentValue / 100; JewelleryRiot = homeProduct.RiotCoverRate * policy.HomeInsurancePolicy.JewelleryValue / 100; TotalRiot = BuildingRiot + ContentRiot; if (TotalRiot <= homeProduct.RiotCoverMinAmount) { TotalRiot = homeProduct.RiotCoverMinAmount; } RiotRate = homeProduct.RiotCoverRate; } //Calculate the home domestic helper amount. if (policy.HomeInsurancePolicy.NoOfDomesticWorker > 0 || policy.HomeDomesticHelpdt.Rows.Count > 0) { var domesticHelpers = policy.HomeDomesticHelpdt.Rows.Count; DomesticHelperAmount = domesticHelpers > 0 ? (domesticHelpers - 1) * homeProduct.DomesticHelperAmount : 0; } //Calculate the jewellery amount. var jCover = homeProduct.JewelleryCover.Find(x => x.KeyType == policy.HomeInsurancePolicy.JewelleryCover); if (jCover != null) { JewellerAmount = jCover.Amount; if (jCover.KeyType == "EXTREME") { JewellerAmount = jCover.Rate * policy.HomeInsurancePolicy.JewelleryValue / 100; } } // TotalPremium = Math.Round(Premium + TotalRiot + DomesticHelperAmount + JewellerAmount, 3, MidpointRounding.AwayFromZero); TotalBasicPremium = Math.Round(BuildingPremium + ContentPremium, 3, MidpointRounding.AwayFromZero); TotalSRCCPremium = Math.Round(BuildingRiot + ContentRiot + JewelleryRiot, 3, MidpointRounding.AwayFromZero); if (TotalBasicPremium <= homeProduct.MinimumPremium) { TotalBasicPremium = homeProduct.MinimumPremium; } TotalBasicPremium = TotalBasicPremium + DomesticHelperAmount + JewellerAmount; TotalPremium = TotalBasicPremium + TotalSRCCPremium; //Deduct the renewal delayed days amount from the premium. if (policy.HomeInsurancePolicy.RenewalDelayedDays > 0) { var renewalDelayedAmount = GetRenewalDelayedDaysAmount(policy, homeProduct, BuildingPremium + ContentPremium + TotalRiot + DomesticHelperAmount + JewellerAmount); TotalPremium = Math.Round(BuildingPremium + ContentPremium + TotalRiot + DomesticHelperAmount + JewellerAmount - renewalDelayedAmount, 3, MidpointRounding.AwayFromZero); var renewalDelayedAmount1 = GetRenewalDelayedDaysAmount(policy, homeProduct, BuildingPremium + ContentPremium + DomesticHelperAmount + JewellerAmount); TotalBasicPremium = Math.Round(BuildingPremium + ContentPremium + DomesticHelperAmount + JewellerAmount - renewalDelayedAmount1, 3, MidpointRounding.AwayFromZero); var renewalDelayedAmount2 = GetRenewalDelayedDaysAmount(policy, homeProduct, BuildingRiot + ContentRiot); TotalSRCCPremium = Math.Round(BuildingRiot + ContentRiot - renewalDelayedAmount2, 3, MidpointRounding.AwayFromZero); } PremiumBeforeDiscount = TotalPremium; //Calculate the commission. CommissionBeforeDiscount = GetCommision(policy.HomeInsurancePolicy, TotalBasicPremium, TotalSRCCPremium); //If the user give the discount if (!policy.HomeInsurancePolicy.UserChangedPremium) { PremiumAfterDiscount = PremiumBeforeDiscount; CommissionAfterDiscount = CommissionBeforeDiscount; } else { PremiumAfterDiscount = policy.HomeInsurancePolicy.PremiumAfterDiscount; CommissionAfterDiscount = policy.HomeInsurancePolicy.CommissionAfterDiscount; } //Calculate the VAT. TaxOnBasicPremium = GetTax(TotalBasicPremium, homeProduct.TaxRate); TaxOnSRCCPremium = GetTax(TotalSRCCPremium, homeProduct.TaxRate); TaxOnPremiumBeforeDiscount = GetTax(PremiumBeforeDiscount, homeProduct.TaxRate); TaxOnPremiumAfterDiscount = GetTax(PremiumAfterDiscount, homeProduct.TaxRate); TaxOnCommissionBeforeDiscount = GetTax(CommissionBeforeDiscount, homeProduct.TaxRate); TaxOnCommissionAfterDiscount = GetTax(CommissionAfterDiscount, homeProduct.TaxRate); //Apply discount. Discount = PremiumBeforeDiscount - PremiumAfterDiscount; //Set HIR - building or content value exceeded the maximum value policy will move to HIR status admin need to approve. SetHIR(homeProduct, policy.HomeInsurancePolicy); }
public void CalculateCommission(BO.HomeProduct homeProduct, BO.HomeInsurancePolicy policy, long homeID, string documentNo, string LinkID, int renewalCount) { try { int lineNo = 0; if (homeProduct.Category != null && homeProduct.Category.Count > 0) { List <PolicyCategory> policyCategories = new List <PolicyCategory>(); foreach (var dr in homeProduct.Category) { lineNo++; if (!policy.UserChangedPremium) { if (dr.ValueType == "Percent" && dr.Code == "BASICCOMM") { var policyCategory = new PolicyCategory(); policyCategory.Agency = dr.Agency; policyCategory.AgentCode = dr.AgentCode; policyCategory.Code = dr.Code; policyCategory.Category = dr.Category; policyCategory.CommissionBeforeDiscount = TotalBasicPremium * dr.Value / 100; policyCategory.CommissionAfterDiscount = TotalBasicPremium * dr.Value / 100; policyCategory.DocumentNo = documentNo; policyCategory.EndorsementCount = 0; policyCategory.EndorsementNo = string.Empty; policyCategory.DocumentID = homeID; policyCategory.LineNo = lineNo.ToString(); policyCategory.LinkID = LinkID; policyCategory.PremiumAfterDiscount = TotalBasicPremium; policyCategory.PremiumBeforeDiscount = TotalBasicPremium; policyCategory.TaxOnCommissionBeforeDiscount = GetTax(policyCategory.CommissionBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnCommissionAfterDiscount = GetTax(policyCategory.CommissionAfterDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumBeforeDiscount = GetTax(TotalBasicPremium, homeProduct.TaxRate); policyCategory.TaxOnPremiumAfterDiscount = GetTax(TotalBasicPremium, homeProduct.TaxRate); policyCategory.Value = dr.Value; policyCategory.ValueType = dr.ValueType; policyCategory.IsDeductable = dr.IsDeductable; policyCategory.RenewalCount = renewalCount; policyCategory.HomeID = homeID; policyCategories.Add(policyCategory); } if (dr.ValueType == "Percent" && dr.Code == "SRCCCOMM") { var policyCategory = new PolicyCategory(); policyCategory.Agency = dr.Agency; policyCategory.AgentCode = dr.AgentCode; policyCategory.Code = dr.Code; policyCategory.Category = dr.Category; policyCategory.CommissionBeforeDiscount = TotalSRCCPremium * dr.Value / 100; policyCategory.CommissionAfterDiscount = TotalSRCCPremium * dr.Value / 100; policyCategory.DocumentNo = documentNo; policyCategory.EndorsementCount = 0; policyCategory.EndorsementNo = string.Empty; policyCategory.DocumentID = homeID; policyCategory.LineNo = lineNo.ToString(); policyCategory.LinkID = LinkID; policyCategory.PremiumAfterDiscount = TotalSRCCPremium; policyCategory.PremiumBeforeDiscount = TotalSRCCPremium; policyCategory.TaxOnCommissionBeforeDiscount = GetTax(policyCategory.CommissionBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnCommissionAfterDiscount = GetTax(policyCategory.CommissionAfterDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumBeforeDiscount = GetTax(TotalSRCCPremium, homeProduct.TaxRate); policyCategory.TaxOnPremiumAfterDiscount = GetTax(TotalSRCCPremium, homeProduct.TaxRate); policyCategory.Value = dr.Value; policyCategory.ValueType = dr.ValueType; policyCategory.IsDeductable = dr.IsDeductable; policyCategory.RenewalCount = renewalCount; policyCategory.HomeID = homeID; policyCategories.Add(policyCategory); } if (dr.ValueType == "Percent" && dr.Code == "AGTCOMM") { var policyCategory = new PolicyCategory(); policyCategory.Agency = dr.Agency; policyCategory.AgentCode = dr.AgentCode; policyCategory.Code = dr.Code; policyCategory.Category = dr.Category; policyCategory.CommissionBeforeDiscount = TotalPremium * dr.Value / 100; policyCategory.CommissionAfterDiscount = TotalPremium * dr.Value / 100; policyCategory.DocumentNo = documentNo; policyCategory.EndorsementCount = 0; policyCategory.EndorsementNo = string.Empty; policyCategory.DocumentID = homeID; policyCategory.LineNo = lineNo.ToString(); policyCategory.LinkID = LinkID; policyCategory.PremiumAfterDiscount = TotalPremium; policyCategory.PremiumBeforeDiscount = TotalPremium; policyCategory.TaxOnCommissionBeforeDiscount = GetTax(policyCategory.CommissionBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnCommissionAfterDiscount = GetTax(policyCategory.CommissionAfterDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumBeforeDiscount = GetTax(TotalPremium, homeProduct.TaxRate); policyCategory.TaxOnPremiumAfterDiscount = GetTax(TotalPremium, homeProduct.TaxRate); policyCategory.Value = dr.Value; policyCategory.ValueType = dr.ValueType; policyCategory.IsDeductable = dr.IsDeductable; policyCategory.RenewalCount = renewalCount; policyCategory.HomeID = homeID; policyCategories.Add(policyCategory); } } else { if (dr.ValueType == "Percent" && dr.Code == "BASICCOMM") { var policyCategory = new PolicyCategory(); policyCategory.Agency = dr.Agency; policyCategory.AgentCode = dr.AgentCode; policyCategory.Code = dr.Code; policyCategory.Category = dr.Category; policyCategory.CommissionBeforeDiscount = TotalBasicPremium * dr.Value / 100; policyCategory.CommissionAfterDiscount = CommissionAfterDiscount; policyCategory.DocumentNo = documentNo; policyCategory.EndorsementCount = 0; policyCategory.EndorsementNo = string.Empty; policyCategory.DocumentID = homeID; policyCategory.LineNo = lineNo.ToString(); policyCategory.LinkID = LinkID; policyCategory.PremiumAfterDiscount = PremiumAfterDiscount; policyCategory.PremiumBeforeDiscount = TotalBasicPremium; policyCategory.TaxOnCommissionBeforeDiscount = GetTax(policyCategory.CommissionBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnCommissionAfterDiscount = GetTax(policyCategory.CommissionAfterDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumBeforeDiscount = GetTax(TotalBasicPremium, homeProduct.TaxRate); policyCategory.TaxOnPremiumAfterDiscount = GetTax(PremiumAfterDiscount, homeProduct.TaxRate); policyCategory.Value = dr.Value; policyCategory.ValueType = dr.ValueType; policyCategory.IsDeductable = dr.IsDeductable; policyCategory.RenewalCount = renewalCount; policyCategory.HomeID = homeID; policyCategories.Add(policyCategory); } if (dr.ValueType == "Percent" && dr.Code == "SRCCCOMM") { var policyCategory = new PolicyCategory(); policyCategory.Agency = dr.Agency; policyCategory.AgentCode = dr.AgentCode; policyCategory.Code = dr.Code; policyCategory.Category = dr.Category; policyCategory.CommissionBeforeDiscount = TotalSRCCPremium * dr.Value / 100; policyCategory.CommissionAfterDiscount = policy.IsRiotStrikeDamage.ToString().ToLower() == "y" ? CommissionAfterDiscount : 0; policyCategory.DocumentNo = documentNo; policyCategory.EndorsementCount = 0; policyCategory.EndorsementNo = string.Empty; policyCategory.DocumentID = homeID; policyCategory.LineNo = lineNo.ToString(); policyCategory.LinkID = LinkID; policyCategory.PremiumAfterDiscount = policy.IsRiotStrikeDamage.ToString().ToLower() == "y" ? PremiumAfterDiscount : 0; policyCategory.PremiumBeforeDiscount = TotalSRCCPremium; policyCategory.TaxOnCommissionBeforeDiscount = GetTax(policyCategory.CommissionBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnCommissionAfterDiscount = GetTax(policyCategory.CommissionAfterDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumBeforeDiscount = GetTax(TotalSRCCPremium, homeProduct.TaxRate); policyCategory.TaxOnPremiumAfterDiscount = GetTax(PremiumAfterDiscount, homeProduct.TaxRate); policyCategory.Value = dr.Value; policyCategory.ValueType = dr.ValueType; policyCategory.IsDeductable = dr.IsDeductable; policyCategory.RenewalCount = renewalCount; policyCategory.HomeID = homeID; policyCategories.Add(policyCategory); } if (dr.ValueType == "Percent" && dr.Code == "AGTCOMM") { var policyCategory = new PolicyCategory(); policyCategory.Agency = dr.Agency; policyCategory.AgentCode = dr.AgentCode; policyCategory.Code = dr.Code; policyCategory.Category = dr.Category; policyCategory.CommissionBeforeDiscount = PremiumBeforeDiscount * dr.Value / 100; policyCategory.CommissionAfterDiscount = PremiumAfterDiscount * dr.Value / 100; policyCategory.DocumentNo = documentNo; policyCategory.EndorsementCount = 0; policyCategory.EndorsementNo = string.Empty; policyCategory.DocumentID = homeID; policyCategory.LineNo = lineNo.ToString(); policyCategory.LinkID = LinkID; policyCategory.PremiumAfterDiscount = PremiumAfterDiscount; policyCategory.PremiumBeforeDiscount = PremiumBeforeDiscount; policyCategory.TaxOnCommissionBeforeDiscount = GetTax(policyCategory.CommissionBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnCommissionAfterDiscount = GetTax(policyCategory.CommissionAfterDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumBeforeDiscount = GetTax(PremiumBeforeDiscount, homeProduct.TaxRate); policyCategory.TaxOnPremiumAfterDiscount = GetTax(PremiumAfterDiscount, homeProduct.TaxRate); policyCategory.Value = dr.Value; policyCategory.ValueType = dr.ValueType; policyCategory.IsDeductable = dr.IsDeductable; policyCategory.RenewalCount = renewalCount; policyCategory.HomeID = homeID; policyCategories.Add(policyCategory); } } } if (policy.UserChangedPremium) { var commissionDiscount = policy.CommissionAfterDiscount; foreach (var pc in policyCategories) { if (pc.IsDeductable) { if (pc.CommissionBeforeDiscount < commissionDiscount) { pc.CommissionAfterDiscount = pc.CommissionBeforeDiscount; pc.TaxOnCommissionAfterDiscount = GetTax(pc.CommissionBeforeDiscount, homeProduct.TaxRate); commissionDiscount = commissionDiscount - pc.CommissionBeforeDiscount; } else { pc.CommissionAfterDiscount = commissionDiscount; pc.TaxOnCommissionAfterDiscount = GetTax(commissionDiscount, homeProduct.TaxRate); commissionDiscount = 0; } } } } InsertCategory(policy, policyCategories); } } catch (Exception ex) { throw ex; } }