NTP-31439 | Vedant Aggarwal | RCC/CL blocked for unsupported MCC (#14681)

This commit is contained in:
vedant aggarwal
2025-01-26 18:13:46 +05:30
committed by GitHub
parent 0261ea8b71
commit 60440f54ca

View File

@@ -141,6 +141,7 @@ import com.navi.pay.onboarding.account.common.model.view.VpaStatus
import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity
import com.navi.pay.onboarding.common.NaviPayOnboardingActionsType
import com.navi.pay.onboarding.common.view.OnboardingIntentData
import com.navi.pay.utils.ALL_ENABLED_ACCOUNTS
import com.navi.pay.utils.AMOUNT_MAX_LENGTH
import com.navi.pay.utils.AMOUNT_MAX_LENGTH_AFTER_DECIMAL
import com.navi.pay.utils.AMOUNT_MAX_LENGTH_BEFORE_DECIMAL
@@ -150,6 +151,7 @@ import com.navi.pay.utils.AT_THE_RATE_CHAR
import com.navi.pay.utils.BANK_ACCOUNT_UNIQUE_ID
import com.navi.pay.utils.COLLECT_REQUEST_ERROR
import com.navi.pay.utils.CREDIT_CARD_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS
import com.navi.pay.utils.CREDIT_LINE_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS
import com.navi.pay.utils.DEFAULT_CONFIG
import com.navi.pay.utils.DEFAULT_UPI_PURPOSE
import com.navi.pay.utils.DS_KEY_NAVI_PAY_CUSTOMER_STATUS
@@ -261,6 +263,27 @@ constructor(
private val upiLiteAnalytics: NaviPayAnalytics.NaviPayUPILite =
NaviPayAnalytics.INSTANCE.NaviPayUPILite()
private val mccForRccAndClNotSupported =
listOf(
"6010",
"6012",
"6013",
"7407",
"7408",
"7409",
"0000",
"6011",
"6051",
"6211",
"7322",
"7800",
"7801",
"7995",
"7802",
"9406",
"4829",
)
private val _bankAccountsState = MutableStateFlow<BankAccountsState>(BankAccountsState.Loading)
val bankAccountsState = _bankAccountsState.asStateFlow()
@@ -1164,7 +1187,11 @@ constructor(
// Credit card checks
if (linkedAccountEntity.accountType == AccountType.CREDIT.name) {
if (!payeeEntity.value.isMerchant || transactionType == UpiTransactionType.SELF_PAY) {
if (
!payeeEntity.value.isMerchant ||
payeeEntity.value.mcc in mccForRccAndClNotSupported ||
transactionType == UpiTransactionType.SELF_PAY
) {
linkedAccountEntity.eligibilityState =
EligibilityState(
isAccountEligible = false,
@@ -1177,7 +1204,11 @@ constructor(
// Credit line checks
if (linkedAccountEntity.accountType == AccountType.UPICREDIT.name) {
if (!payeeEntity.value.isMerchant || transactionType == UpiTransactionType.SELF_PAY) {
if (
!payeeEntity.value.isMerchant ||
payeeEntity.value.mcc in mccForRccAndClNotSupported ||
transactionType == UpiTransactionType.SELF_PAY
) {
linkedAccountEntity.eligibilityState =
EligibilityState(
isAccountEligible = false,
@@ -1811,10 +1842,9 @@ constructor(
// Show add account if all accounts are ineligible
bankAccountState is BankAccountsState.AccountList &&
bankAccountState.accounts.none { it.eligibilityState.isAccountEligible } -> {
val isRccEnabled = isRccEnabledForAddition()
SendMoneyMainCtaState.AddAccount(
ctaText =
if (isRccEnabled)
if (isRccEnabledForTransaction() || isClEnabledForTransaction())
resourceProvider.getString(resId = R.string.add_account)
else resourceProvider.getString(resId = R.string.add_bank_account)
)
@@ -3177,24 +3207,35 @@ constructor(
}
}
private fun isRccEnabledForAddition(): Boolean {
private fun isRccEnabledForTransaction(): Boolean {
val paymentAmount = paymentAmount.value.text.toDoubleOrNull() ?: 0.0
return payeeEntity.value.mcc.isNotNullAndNotEmpty() &&
return payeeEntity.value.isMerchant &&
payeeEntity.value.mcc !in mccForRccAndClNotSupported &&
accountEligibilityMerchantHelper.getAccountEligibility(
eligibility = accountTypeEligibilityMap[AccountEligibilityMerchantHelper.CREDIT],
amount = paymentAmount,
)
}
private fun isClEnabledForTransaction(): Boolean {
val paymentAmount = paymentAmount.value.text.toDoubleOrNull() ?: 0.0
return payeeEntity.value.isMerchant &&
payeeEntity.value.mcc !in mccForRccAndClNotSupported &&
accountEligibilityMerchantHelper.getAccountEligibility(
eligibility = accountTypeEligibilityMap[AccountEligibilityMerchantHelper.UPICREDIT],
amount = paymentAmount,
)
}
fun addAccountSdkAction() {
viewModelScope.launch(Dispatchers.IO) {
val onboardingAction = NaviPayOnboardingActionsType.ACCOUNT_ADDITION.name
val isRccEnabledForAddition = isRccEnabledForAddition()
val enabledAccountTypes =
when {
isRccEnabledForAddition -> CREDIT_CARD_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS
isRccEnabledForTransaction() && isClEnabledForTransaction() ->
ALL_ENABLED_ACCOUNTS
isRccEnabledForTransaction() -> CREDIT_CARD_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS
isClEnabledForTransaction() -> CREDIT_LINE_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS
else -> SAVINGS_ONLY_ENABLED_ACCOUNTS
}