/// <summary>
        /// method used to get funded deductible movement types from the Metadata.
        /// </summary>
        /// <param name="entities">Metadata Entity value</param>
        /// <param name="productVersion">long value</param>
        /// <param name="attachedPolicyRef">string value</param>
        /// <param name="fundedDeductiblePolicies">Dictionary collection</param>
        /// <param name="pcd">Product Claim Definition Type</param>
        /// <param name="recoveryReserveMovementType">string value</param>
        /// <param name="reserveMovementType">string value</param>
        /// <param name="isRecoveryReserve">bool value</param>
        /// <param name="movementTypes">Dictionary collection - Passed by reference</param>
        /// <returns>Dictionary collection</returns>
        private static Dictionary<string, string> GetFundedDeductibleMovementTypes(MetadataEntities entities, long productVersion, string attachedPolicyRef, Dictionary<string, string> fundedDeductiblePolicies, ProductClaimDefinition pcd, string recoveryReserveMovementType, string reserveMovementType, bool isRecoveryReserve, ref Dictionary<string, string> movementTypes)
		{
			if (_Logger.IsInfoEnabled)
			{
				_Logger.Info("ClaimTransferDataCollection.GetFundedDeductibleMovementTypes");
			}

            // For each of the five Deductible codes, check if we are adding to the list of Dedctible moment type codes.
            AddDeductibleMovemnentTypeCodes(ClaimConstants.DED_DEDUCTIBLE01, pcd.InsurerFundedDeductible01MovementTypeCode, attachedPolicyRef, fundedDeductiblePolicies, recoveryReserveMovementType, reserveMovementType, isRecoveryReserve, ref movementTypes);
            AddDeductibleMovemnentTypeCodes(ClaimConstants.DED_DEDUCTIBLE02, pcd.InsurerFundedDeductible02MovementTypeCode, attachedPolicyRef, fundedDeductiblePolicies, recoveryReserveMovementType, reserveMovementType, isRecoveryReserve, ref movementTypes);
            AddDeductibleMovemnentTypeCodes(ClaimConstants.DED_DEDUCTIBLE03, pcd.InsurerFundedDeductible03MovementTypeCode, attachedPolicyRef, fundedDeductiblePolicies, recoveryReserveMovementType, reserveMovementType, isRecoveryReserve, ref movementTypes);
            AddDeductibleMovemnentTypeCodes(ClaimConstants.DED_DEDUCTIBLE04, pcd.InsurerFundedDeductible04MovementTypeCode, attachedPolicyRef, fundedDeductiblePolicies, recoveryReserveMovementType, reserveMovementType, isRecoveryReserve, ref movementTypes);
            AddDeductibleMovemnentTypeCodes(ClaimConstants.DED_DEDUCTIBLE05, pcd.InsurerFundedDeductible05MovementTypeCode, attachedPolicyRef, fundedDeductiblePolicies, recoveryReserveMovementType, reserveMovementType, isRecoveryReserve, ref movementTypes);

			return movementTypes;
		}
        /// <summary>
        /// method used to get funded deductible movement types.
        /// </summary>
        /// <param name="entities">Metadata Entity</param>
        /// <param name="productVersion">long value</param>
        /// <param name="riskProductCode">string value</param>
        /// <param name="attachedPolicyRef">string value</param>
        /// <param name="fundedDeductiblePolicies">Dictionary collection</param>
        /// <param name="cth">Claim Transaction Header</param>
        /// <returns>Dictionary collection</returns>
        private static Dictionary<string, string> GetFundedDeductibleMovementTypes(MetadataEntities entities, long productVersion, string riskProductCode, string attachedPolicyRef, Dictionary<string, string> fundedDeductiblePolicies, XiapClaim.ClaimTransactionHeader cth)
        {
            string reserveMovementType;
           var movementTypes = new Dictionary<string, string>();

            // Get the claim definition from the Product Version passed in.
            ProductClaimDefinition pcd = (from claimDefinition in entities.ProductClaimDefinition
                                          where claimDefinition.ProductVersionID == productVersion
                                          select claimDefinition).FirstOrDefault();


            // Add funded deductible movement types for Reserve, Payment and RecoveryReceipt, if this isn't a Recovery Reserve Claim Transaction Header
            if (cth.ClaimTransactionSource != (short)StaticValues.ClaimTransactionSource.RecoveryReserve)
            {
                GetFundedDeductibleMovementTypes(entities, productVersion, attachedPolicyRef, fundedDeductiblePolicies, pcd, null, null, false, ref movementTypes);
            }

            // Add funded deductible movement types for recovery reserve if the CTH is a RecoveryReserve or Recovery Receipt
            if (cth.ClaimTransactionSource == (short)StaticValues.ClaimTransactionSource.RecoveryReserve || cth.ClaimTransactionSource == (short)StaticValues.ClaimTransactionSource.RecoveryReceipt)
            {
                // Cycle through all Claim Transaction Groups
                foreach (XiapClaim.ClaimTransactionGroup ctg in cth.ClaimTransactionGroups)
                {
                    // Cycle through each Claim Transaction Detail on each group
                    foreach (XiapClaim.ClaimTransactionDetail ctd in ctg.ClaimTransactionDetails)
                    {
                        // For any Recovery Reserve type amounts
                        if (ctd.AmountType == (short)StaticValues.AmountType.RecoveryReserve)
                        {
                            // Retrieve funded deductible reserve movement type on the basis of recovery reserve movement type
                            ClaimsBusinessLogicHelper.TryGetReserveMovementType(ctd.MovementType, riskProductCode, out reserveMovementType);

                            // Add to the list of types if we get a value.
                            if (!string.IsNullOrWhiteSpace(reserveMovementType))
                            {
                                GetFundedDeductibleMovementTypes(entities, productVersion, attachedPolicyRef, fundedDeductiblePolicies, pcd, ctd.MovementType, reserveMovementType, true, ref movementTypes);
                            }
                        }
                    }
                }
            }

            return movementTypes;
        }