public FinancialTransactionContext(ClaimHeader claimHeader, ClaimDetail claimDetail, ClaimTransactionHeader claimTransactionHeader, ClaimTransactionGroup claimTransactionGroup, User user) { this.ClaimHeader = claimHeader; this.ClaimDetail = claimDetail; this.ClaimTransactionHeader = claimTransactionHeader; this.ClaimTransactionGroup = claimTransactionGroup; this.CurrentUser = user; this.TransactionSource = (StaticValues.ClaimTransactionSource)this.ClaimTransactionHeader.ClaimTransactionSource; this.Product = claimHeader.GetProduct(); this.ProductClaimDefinition = this.Product.ProductClaimDefinition; this.ProductClaimDetails = this.Product.ClaimDetails; }
private static decimal AddReserve(decimal amount, FinancialTransactionContext financialContext, ClaimDetail claimDetail, ClaimTransactionGroup claimTransactionGroup, DeductibleDefinition deductibleDefinition, DeductibleReserveCapacity deductibleReserveContext, ClaimFinancialAmount latestReserve = null) { StaticValues.AmountType amountType; string nonFundedMovementType; if (IsRecovery(financialContext.TransactionSource)) { amountType = StaticValues.AmountType.RecoveryReserve; nonFundedMovementType = deductibleDefinition.RecoveryNonFundedMovementType; } else { amountType = StaticValues.AmountType.Reserve; nonFundedMovementType = deductibleDefinition.NonFundedMovementType; } if (latestReserve == null) { if (amount > 0) { AddClaimTransactionDetails(financialContext.ClaimTransactionHeader.TransactionDate.GetValueOrDefault(DateTime.MinValue), claimTransactionGroup, amountType, deductibleDefinition, amount, latestReserve); deductibleReserveContext.AdjustDeductibleAttached(claimDetail.ClaimDetailReference, nonFundedMovementType, amount); } else { amount = 0; } } else if (amount != Math.Abs(latestReserve.TransactionAmountClaimCurrency.GetValueOrDefault(0))) { AddClaimTransactionDetails(financialContext.ClaimTransactionHeader.TransactionDate.GetValueOrDefault(DateTime.MinValue), claimTransactionGroup, amountType, deductibleDefinition, amount, latestReserve); deductibleReserveContext.AdjustDeductibleAttached(claimDetail.ClaimDetailReference, nonFundedMovementType, amount + latestReserve.TransactionAmountClaimCurrency.GetValueOrDefault()); } return amount; }
/// <summary> /// Add new claim transaction detail for the new deductible. If payment/resere then stored as +ve if recovery reserve stored as -ve /// </summary> /// <param name="claimTransactionGroup">claim transaction group to attach to</param> /// <param name="amountType">amount type</param> /// <param name="deductibleDefinition">deductible definition containing deductible movement type</param> /// <param name="amount">deductible amount</param> /// <param name="latestNonFundedReserve">latest reserve if any</param> /// <returns>Amount s</returns> private static decimal AddClaimTransactionDetails(DateTime transactionDate, ClaimTransactionGroup claimTransactionGroup, StaticValues.AmountType amountType, DeductibleDefinition deductibleDefinition, decimal amount, ClaimFinancialAmount latestNonFundedReserve = null) { decimal convertedAmount; if (claimTransactionGroup.ClaimCurrencyCode != claimTransactionGroup.OriginalCurrencyCode) { convertedAmount = ClaimsBusinessLogicHelper.ConvertCurrencyAmount(claimTransactionGroup.ClaimTransactionHeader, amount, claimTransactionGroup.ClaimCurrencyCode, claimTransactionGroup.OriginalCurrencyCode); } else { convertedAmount = amount; } string fundedMovementType, nonFundedMovementType; if (amountType == StaticValues.AmountType.RecoveryReserve) { convertedAmount = -convertedAmount; fundedMovementType = deductibleDefinition.RecoveryFundedMovementType; nonFundedMovementType = deductibleDefinition.RecoveryNonFundedMovementType; } else { fundedMovementType = deductibleDefinition.FundedMovementType; nonFundedMovementType = deductibleDefinition.NonFundedMovementType; } short? reserveDaySequence = null; if (amountType == StaticValues.AmountType.Reserve || amountType == StaticValues.AmountType.RecoveryReserve) { reserveDaySequence = (short)(latestNonFundedReserve == null ? 10 : latestNonFundedReserve.ReserveDaySequence.GetValueOrDefault(0) + 10); } var claimTransactionDetail = claimTransactionGroup.AddNewClaimTransactionDetail((short)amountType, nonFundedMovementType); PopulateClaimTransactionDetail(claimTransactionDetail, convertedAmount, -Math.Abs(convertedAmount), transactionDate, reserveDaySequence, amountType); List<FlattenedTransaction> flattenedTransactions; if (GlobalClaimWakeUp.MappedTransactionDetails.TryGetValue(claimTransactionGroup.ClaimTransactionHeader.ClaimHeader.ClaimReference, out flattenedTransactions)) { flattenedTransactions.Add(Mapper.Map<ClaimTransactionDetail, FlattenedTransaction>(claimTransactionDetail)); } if (fundedMovementType != null) { claimTransactionDetail = claimTransactionGroup.AddNewClaimTransactionDetail((short)amountType, fundedMovementType); PopulateClaimTransactionDetail(claimTransactionDetail, -convertedAmount, Math.Abs(convertedAmount), transactionDate, reserveDaySequence, amountType); if (GlobalClaimWakeUp.MappedTransactionDetails.TryGetValue(claimTransactionGroup.ClaimTransactionHeader.ClaimHeader.ClaimReference, out flattenedTransactions)) { flattenedTransactions.Add(Mapper.Map<ClaimTransactionDetail, FlattenedTransaction>(claimTransactionDetail)); } } return amount; }
private static ClaimTransactionGroup ResolveClaimTransactionGroup(ClaimTransactionHeader claimTransactionHeader, ClaimTransactionGroup currentClaimTransactionGroup, ClaimDetail claimDetail) { var claimTransactionGroup = claimTransactionHeader.ClaimTransactionGroups.SingleOrDefault(a => a.ClaimDetail == claimDetail); if (claimTransactionGroup == null) { claimTransactionGroup = claimTransactionHeader.AddNewClaimTransactionGroup(claimDetail, false); claimTransactionGroup.UpdateData(currentClaimTransactionGroup); // don't want to copy the id accross claimTransactionGroup.ClaimTransactionGroupID = 0; } return claimTransactionGroup; }