03-取现与Instant-Cash
Instant Cash(取现)是 SDK 内的主借款产品:用户在取现额度内申请一笔现金借款,选分期、读 RIPLAY 合同、密码确认后资金到账 Allo Wallet,随后按期数×每月应还分期偿还并生成借据。
"Instant Cash(取现)是 SDK 内的**主借款产品**:用户在取现额度内申请一笔现金借款,选分期、读合同(RIPLAY)、密码确认后,资金到账 Allo Wallet,随后按"期数 × 每月应还"分期偿还并生成借据。"
首借用户(从没借过)进入取现时先看一页产品介绍(Intro),点“Get Cash Now”才进入流程。
"**首借用户**(从没借过) | 先看一页产品介绍(Intro),点"Get Cash Now"才进流程"
持低价券用户进入取现时先进入利率档选择页(0%/0.5% 等档位任选),再进金额页。
"**持低价券用户** | 先进**利率档选择页**(0% / 0.5% 等档位任选),再进金额页"
点入口时有准入闸门:账户冻结的用户被静默拦下(不弹窗);额度低于门槛的用户被告知额度不足。
"账户冻结的用户静默拦下(产品口径不弹窗);额度低于门槛的用户被告知额度不足。"
取现入口门槛分层:普通用户最低 10 万卢比才可进入,持低价券用户 2 千卢比即放行。
"门槛本身是**分层的**——普通用户最低 10 万卢比才可进入,**持低价券用户 2 千卢比就放行**"
从额度首页进入的用户经过五道账户检查:邮箱未验证→去验证、证件待重传→去重传、冻结/审核中→告知、已逾期→引导先还款,每种拦截给出明确下一步动作。
"从额度首页进入的用户还会经过五道账户检查(邮箱未验证→去验证、证件待重传→去重传、冻结/审核中→告知、已逾期→引导先还款),每种拦截都给出明确的下一步动作。"
选期数时系统按金额实时试算分期档(1~24 期,档位由后端按用户资质下发),默认选最长期数。
"系统按金额实时试算分期档(1~24 期,档位由后端按用户资质下发),**默认选最长期数**"
确认页必须读完并勾选 RIPLAY 合同(监管要求的产品信息披露),合同未加载完或未勾选就不能提交。
"同时必须**读完并勾选 RIPLAY 合同**(监管要求的产品信息披露,含费率、还款计划、逾期后果),合同没加载完/没勾选就不能提交。"
DBDP 复借受限用户在确认与合规步骤被拦:有未结清欠款则弹窗要求先还清(单笔单批策略)。
"**DBDP 复借受限用户在这一步被拦**:有未结清欠款则弹窗要求先还清(单笔单批策略)。"
身份验证需输 PIN,但 IM3/BIMA 合作渠道免 PIN。
"输 PIN(**IM3/BIMA 合作渠道免 PIN**,其风控依据待确认)"
CL 取现要串行过四个后端决策引擎:反欺诈引擎→刷脸引擎→首借引擎/复借引擎,首借与复借用户走不同授信决策引擎。
"**CL 取现要串行过四个后端决策引擎:反欺诈引擎 → 刷脸引擎 → 首借引擎/复借引擎**"
决策引擎判定可疑时,加验人脸或 OTP(含 WhatsApp 通道)后才放款。
"引擎判定可疑时加验人脸或 OTP(含 WhatsApp 通道)后才放款。"
取现放款结果分四种:成功(含到账额与参考号)、失败、审核中、额度变化。
"结果分四种——**成功(含到账额与参考号)/ 失败 / 审核中 / 额度变化**。"
提交瞬间授信刷新导致新额度低于申请额时,用户看到“额度已变化,请重试”,点重试回金额页按新额度重新申请。
"提交瞬间授信刷新导致新额度低于申请额,用户会看到"额度已变化,请重试",点重试回金额页按新额度再来。"
门槛规则:入口普通用户 100K、持低价券 2K;进入金额页后统一 2K。
"门槛 | 入口:普通 100K / 持低价券 2K;进入金额页后统一 2K"
取现费用为两费结构:砍头息(放款时一次性扣,≈6%,到账=本金−头息)+ admin fee(月费 0–9%,按原始本金每期等额)。
"费用 | **两费结构(PM 2026-07-16 复核,与 PL 对称)**:**砍头息**(放款时一次性扣,≈6%,到账=本金−头息)+ **admin fee**(月费 0–9%,按原始本金每期等额)"
低价权益由营销发放 DJ 权益(前端表现为 INT_RG 价格券),走独立利率档流程,静默生效——确认页不展示券名,用户只看到便宜后的价格。
"低价权益 | 营销发放 DJ 权益(前端表现为 INT_RG 价格券),独立利率档流程;**静默生效**——确认页不展示券名,用户只看到便宜后的价格"
合规规则:RIPLAY 必读必勾;首借强制定位授权;合同版本随单存档。
"合规 | RIPLAY 必读必勾;首借强制定位授权;合同版本随单存档"
复借限制:DBDP 客群单笔单批,有未结清欠款不得再借;机制为字段强控(风控预先打在用户 riskCode 上的 DBDP 标签,前端直接硬拦截),不经复借引擎实时决策。
"复借限制 | DBDP 客群单笔单批:有未结清欠款不得再借。**机制=字段强控**(风控预先打在用户 riskCode 上的 DBDP 标签,前端直接硬拦截),**不经复借引擎实时决策**"
渠道差异:IM3/BIMA 渠道免 PIN,结果页引导下载 Allo App。
"渠道差异 | IM3/BIMA 渠道免 PIN、结果页引导下载 Allo App"
额度动用率低于 20% 的用户在放弃取现返回时触发挽留调研问卷,每人每 7 天最多一次。
"额度动用率低于 20% 的用户(额度很富余却不借)在**放弃取现返回时**触发调研问卷,每人每 7 天最多一次"
常规取现页对全部用户统一最低取现额度 Rp2,000,不再区分是否低价权益用户。
"常规取现页对**全部用户统一**最低取现额度 Rp2,000(`Index.vue:553-557` 注释明示双轨已退场,不再区分是否低价权益用户)"
常规取现提交接口为 coreTransApplyLoan,入参无 LOAN_CODE;产品号 9022 作为常量定义,非提交时透传。
"提交接口实为 **`coreTransApplyLoan`**(`Confirm.vue:332`),入参中**无 `LOAN_CODE`**;产品号 9022 作为常量定义在 `constants/pay-later/withdraw.js`,非提交时透传。"
前端实际识别的低价标识是 INT_RG 价格券,代码内无 DJ/DJXXX 字面常量;DJ 权益是营销系统下发口径,落到前端表现为 INT_RG 价格券。
"**前端实际识别的低价标识是 `INT_RG` 价格券**(`constants/coupon.js:68`),代码内并无 `DJ`/`DJXXX` 字面常量——"DJ 权益(DJXXX)"是营销系统下发口径,落到前端表现为 `INT_RG` 价格券。"
RIPLAY 合同为监管要求的产品信息摘要(PIS),iframe 展示,勾选“已阅读同意”且加载完成后才能提交。
"监管要求的产品信息摘要(PIS),iframe 展示;勾选"已阅读同意" + 加载完成后才能提交。"
当 RiskCode 含 DBDP 且在贷余额>0(=总额度−可用信用额度)时弹窗“需还清贷款后才可复借”(单人单笔);非 DBDP 用户可多笔并存。
"当 RiskCode 含 **DBDP** 且**在贷余额 > 0**(= 总额度 − 可用信用额度)时弹窗"需还清贷款后才可复借"(单人单笔),非 DBDP 用户可多笔并存"
DBDP 复借拦截点不在首页入口,而在确认页提交时判断并以 blocking-popup 阻断。
"**拦截点不在首页入口,而在确认页提交时**(`Confirm.vue:219-228` `onConfirmWithdraw` 内判断,blocking-popup 阻断,2026-07-16 代码查实)"
VDC Auto top-up:绑定 VDC 虚拟借记卡后,卡余额不足时自动从额度/钱包补足,保障线上/绑卡支付。
"绑定 VDC 虚拟借记卡后,卡余额不足时自动从额度/钱包补足,保障线上/绑卡支付"
取现准入拦截包括:邮箱验证、ID 重传(blockCode q)、冻结(R|S|F|n|B)、审核中(T)、逾期(A|Z 或 acctStmtStatus=OVER_DUE)。
"**准入拦截**(`checkAccountBeforeWithdrawAndPay`):邮箱验证、ID 重传(blockCode `q`)、冻结(`R|S|F|n|B`)、审核中(`T`)、逾期(`A|Z` 或 acctStmtStatus=OVER_DUE)。"
复借门槛:riskCode 含 DBDP 且在贷余额>0(在贷余额=总额度−可用信用额度)。
"**复借门槛**:`riskCode ∋ DBDP` + 在贷余额 > 0(在贷余额 = 总额度 − 可用信用额度)。"
取现入口门槛:主页 Instant Cash 入口持 INT_RG 价格券为 Rp2,000,否则 Rp100,000;进入常规取现页后全用户统一 Rp2,000。
"**取现入口门槛**:主页「Instant Cash」入口的最低取现门槛为——持 `INT_RG` 价格券则 Rp2,000,否则 Rp100,000(`home/Index.vue:1154-1157`,行号 2026-07-16 勘误,原记 1108-1110 处实为重组判断);进入常规取现页后则全用户统一 Rp2,000"
推荐金额芯片=可取额度的[100%,50%,25%]向下取整到 10 万(<50 万剔除但补 500K 档),非最低门槛。
"推荐金额芯片 = 可取额度的 [100%, 50%, 25%] 向下取整到 10 万(<50 万剔除但补 500K 档,`home/Index.vue:856-874`),非最低门槛。"
低价档生成:每档 minLimit=max(tryCalcLevelMinLimit, 2000),列表按费率升序排列、disabled 档沉底。
"**低价档生成**:`withdraw-utils.js#formatMethods` 输出各低价档,每档 `minLimit = max(tryCalcLevelMinLimit, 2000)`,列表按费率升序排列、disabled 档沉底。"
营销系统以 DJ 类权益(DJXXX)为口径下发低价标记,落到 SDK 前端的实际识别物是 INT_RG 价格券,由其触发取现页的低价定价与展示/门槛规则。
"营销系统侧以 **DJ 类权益(DJXXX)** 为口径下发低价标记,落到 SDK 前端的实际识别物是 **`INT_RG` 价格券**"
进入常规取现页后,最低取现额度对全部用户统一为 Rp2,000(低价/非低价双轨已退场)。
"进入**常规取现页**后,最低取现额度对**全部用户统一为 Rp2,000**"
主页 Instant Cash 入口门槛:持 INT_RG 价格券则最低 Rp2,000,否则 Rp100,000;500K 为推荐金额档而非门槛。
"主页「Instant Cash」入口门槛:持 `INT_RG` 价格券则 Rp2,000,否则 Rp100,000"
低价取现页内,可用低价额度 < 2K 时显示"额度已用完"样式并展示提示文案(仅首笔金额享此利率,可先还当前账单再使用)。
"可用低价额度 < 2K:显示"额度已用完"样式"
低价权益用户若 0% admin fee 额度已全部用完,或剩余 PL 额度 < 2K,则展示提示文案。
"低价权益用户若 0% admin fee 额度已全部用完,或剩余 PL 额度 < 2K,则展示上述提示文案。"
低价支用主页:用户当前仅有 1 个低价利率且可用时,进入页面自动选中该利率并展示对应信息。
"用户当前**仅有 1 个低价利率且可用**时,进入页面自动选中该利率并展示对应信息。"
低价支用主页:用户有 >1 个低利率时不默认选中,展示全部利率列表由用户自行选择。
"用户有 **> 1 个低利率**时,不默认选中,展示全部利率列表由用户自行选择。"
低价支用主页展示的"可用额度"数值应为用户当前可用的取现额度,而非总额度。
"此页展示的"可用额度"数值应为用户**当前可用的取现额度**,而非总额度。"
低价主页内,若剩余可用低价额度 > 剩余可用取现额度,则展示的低价额度最大值等于剩余可用取现额度(取两者较小值)。
"若用户**剩余可用低价额度 > 剩余可用取现额度**,则页面内展示的低价额度最大值应等于**剩余可用取现额度**(取两者中较小值)。"
引擎输出的当前剩余可用低价额度字段为 TryCalcLevelMaxLimit。
"引擎输出的当前剩余可用低价额度字段为 `TryCalcLevelMaxLimit`。"
主页判断用户是否持有 DJXXX 低价权益,命中则展示低利率引导文案,对正常 PL 与 Y001 用户均生效。
"主页判断用户是否持有 DJXXX 低价权益,命中则展示低利率引导文案(如 *0% interest / 0% admin*),对正常 PL 与 Y001 用户均生效。"
二期收紧:低价引导标记展示条件为持有 DJ 权益且当前额占率 < 营销系统配置的第一个价格区间上限值。
"引导标记的展示条件为「持有 DJ 权益 **且** 当前额占率 < 营销系统配置的第一个价格区间上限值」"
额占率 < DJ 权益配置的第一个价格区间上限值则展示低价引导,≥ 则不展示;标记内 X% 文案读取营销系统配置 DJ 权益第一个价格区间的费率值。
"额占率 < DJ 权益配置的第一个价格区间上限值则展示低价引导,≥ 则不展示。"
低价支用页:低价选择里不展示 special 文案,分期里不展示划掉的每月还款原价,感知定价页还款计划里不展示划掉的原价。
"低价选择里不展示 special 文案;分期里不展示划掉的每月还款原价;感知定价页的还款计划里不展示划掉的原价。"
低价支用页底部为统一按钮:点击 more cash & instalment 跳转常规取现页(携带当前金额与期数),点击 continue 进入支用金额与期数预览页。
"无 more cash / more instalment 按钮,底部为统一按钮:点击 more cash & instalment 跳转常规取现页(携带当前金额与期数),点击 continue 进入支用金额与期数预览页。"
低价支用流程滑动到最大金额时,金额显示为 XXX(Max) 并出现"更多金额"按钮,点击进入常规取现页(携带当前金额与期限)。
"在低价支用流程滑动到最大金额时出现特殊交互:金额显示为 `XXX(Max)` 并出现"更多金额"按钮,点击进入常规取现页(携带当前金额与期限)。"
DJ 权益(DJXXX)是营销系统侧的低价权益编码,落到 SDK 前端的实际识别物是 INT_RG 价格券;前端不出现 DJ/DJXXX 字面常量。
"DJ 权益(DJXXX)是营销系统侧的低价权益编码,落到 SDK 前端的实际识别物是 `INT_RG` 价格券"
高额度挽留问卷弹窗触发时机为从取现金额页/低价档页点返回(onNavBack)离开时。
"触发时机 = **从取现金额页/低价档页点返回(onNavBack)离开时**"
高额度挽留问卷弹窗还需用户可用额度占比 > 0.8(availableLimit/totalLimit > 0.8,即几乎未动用额度)才触发。
"且用户**可用额度占比 > 0.8**(`availableLimit/totalLimit > 0.8`,即几乎未动用额度)"
高额度挽留问卷弹窗节流:每 7 天最多弹一次(localStorage 时间戳 INVESTIGATION_POPUP_TIMESTAMP)。
"节流:**每 7 天最多弹一次**"
RIPLAY 是监管要求展示的产品与服务信息摘要,取现提交前以 iframe 展示并需勾选已阅读同意。
"RIPLAY(Ringkasan Informasi Produk dan Layanan,产品与服务信息摘要)是监管要求展示的产品信息摘要,取现提交前以 iframe 展示并需勾选已阅读同意。"
合同 URL、费率与期限枚举等由后端 CONTRACT_BASE 下发,前端仅渲染 iframe,不在前端组装合同内容。
"合同 URL、费率与期限枚举等由后端 `CONTRACT_BASE` 下发,前端仅渲染 iframe(不在本仓前端组装合同内容)"
Instant Cash 产品:发行方 PT. Allo Bank Indonesia Tbk,产品类型无抵押信贷(Kredit Tanpa Agunan),币种 Rupiah。
"**发行方**:PT. Allo Bank Indonesia Tbk;**产品类型**:Kredit Tanpa Agunan(无抵押信贷);**产品名**:Instant Cash;**币种**:Rupiah。"
Instant Cash 为面向持有 PayLater 客户的现金贷,资金发放至 Allo Wallet 供个人用途,可按所选期限分期偿还,期限枚举为 1/3/6/12/18/24 个月。
"面向持有 PayLater 的 Allo Bank 客户的现金贷,**资金发放至 Allo Wallet**,供个人用途使用;可按所选期限分期偿还,期限枚举为 **1 / 3 / 6 / 12 / 18 / 24 个月**。"
Instant Cash 申请费用包括管理费 admin_fee 和交易费 service_fee。
"申请费用:管理费 `{admin_fee}`、Instant Cash 交易费 `{service_fee}`。"
Instant Cash 偶发费用:逾期费 0.3%/日(按逾期账单金额);提前还款费 = 提前还款金额的 10%。
"偶发费用:**逾期费 0.3%/日**(按逾期账单金额);**提前还款费 = 提前还款金额的 10%**。"
RIPLAY 试算还款计划逐期列出到期日、应还、利息分摊、本金分摊与剩余本金,每月还款日为每月 10 日。
"还款计划逐期列出到期日、应还、利息分摊、本金分摊与剩余本金,**每月还款日为每月 10 日**。"
监管声明:Allo Bank 受 OJK 监管并参加 LPS 存款保障;逾期可依规将催收/债权转让第三方。
"**监管声明**:Allo Bank 受 OJK 监管并参加 LPS 存款保障;逾期可依规将催收/债权转让第三方等。"
用户使用 admin fee 利率券时,RIPLAY 还款计划里 Biaya Layanan(admin fee)需展示用券后的折后金额。
"用户使用 **admin fee 利率券**时,RIPLAY 还款计划里 `Biaya Layanan`(admin fee)需展示**用券后的折后金额**。"
用 0% admin fee 券(仅首月)时,取现示例第 1 期 Biaya Layanan 显示 Rp0,其后各期按原费率计。
"用 0% admin fee 券(仅首月)→ 第 1 期 `Biaya Layanan` 显示 Rp0,其后各期按原费率计。"
取现与 PayLater 协议的 Disclaimer 章节均新增"债权可转让第三方"披露条款。
"取现与 PayLater 协议的 Disclaimer 章节均新增"债权可转让第三方"一条"
alpha首页取现入口点击后依次执行:埋点上报ENTER_GET_CASH_CLICK→路由权限校验(不可开则goOpenAllo)→冻结静默拦截→门槛校验→按cashState分流。
"顺序:①埋点 + 对外上报 `ENTER_GET_CASH_CLICK` → ②路由权限(不可开 → `goOpenAllo()`)→ ③**冻结静默拦截**(`frozenState≠NONE` 直接 return,产品口径不弹框)→ ④**门槛**(持 INT_RG 券 2K / 否则 100K,`cashLimit` 不足 → alert + 埋点 `CREDIT_NOT_ENGOUTH`)→ ⑤按 **`cashState`** 分流:"
取现入口在frozenState不等于NONE(存在冻结)时直接静默拦截并return,产品口径不弹框提示。
"`frozenState≠NONE` 直接 return,产品口径不弹框"
取现门槛:持有INT_RG券时最低2K,否则100K;cashLimit不足门槛时弹alert并埋点CREDIT_NOT_ENGOUTH。
"持 INT_RG 券 2K / 否则 100K,`cashLimit` 不足 → alert + 埋点 `CREDIT_NOT_ENGOUTH`"
cashState取值W(NEW_CREDIT,首借)表示未借款未支付,去向为Intro介绍页,点Get Cash Now再分流。
"`W`(NEW_CREDIT,首借) | 未借款未支付 | Intro 介绍页 → 点 Get Cash Now 再分流"
cashState取值AC(AVAILABLE_CREDIT)或default表示可借,去向为goWithdraw()。
"`AC`(AVAILABLE_CREDIT)/ default | 可借 | `goWithdraw()`"
持券分流:equities中有INT_RG且STATUS='0'时进入低价档页WithdrawMethods(携带listNo/equityType/equityNo),否则进入常规金额页。
"`equities` 中有 `INT_RG` 且 `STATUS='0'` → 低价档页 `WithdrawMethods`(带 `listNo/equityType/equityNo`);否则常规金额页"
五级拦截checkAccountBeforeWithdrawAndPay仅由Home.vue/HomeV2.vue/AppGuidedTour.vue调用;alpha首页home/Index.vue的取现入口不走它,使用自身的冻结/门槛判断。
"**alpha 首页 `home/Index.vue` 的取现入口不走它**,用自身冻结/门槛判断"
五级拦截中账户冻结判据为blockCode含R/S/F/n/B,弹窗主行为为Got it且无二级按钮。
"账户冻结 | blockCode 含 `R/S/F/n/B` | Got it(无二级按钮)"
五级拦截中已逾期判据为acctStmtStatus=OVER_DUE或blockCode含A/Z,弹窗主行为为Repay跳还款页并带未还总额。
"已逾期 | `acctStmtStatus=OVER_DUE` 或 blockCode 含 `A/Z` | Repay → 还款页(带未还总额)"
取现可取上限为availableLimit与cashLimit的较小值,下限统一为2000。
"**可取上限** = `min(availableLimit, cashLimit)`(`:547-552`);**下限统一 2000**"
试算返回的LOAN_LIST按期数降序渲染,默认选中最大期数档。
"返回 `LOAN_LIST` 按期数**降序**渲染,**默认选最大期数档**(`termDidSelected(0)`)"
普通券券列表过滤条件为status='0'且equityScenario=CASH_LOAN。
"券列表过滤 `status='0' && equityScenario=CASH_LOAN`"
低价流程试算与常规页三点不同:并发带券/不带券两次、多传ONLY_DISCOUNT_PRICE='Y'、LOAN_CODE硬编码为'9022'。
"**并发带券/不带券两次**、多传 **`ONLY_DISCOUNT_PRICE:'Y'`**、`LOAN_CODE` **硬编码 '9022'**"
验密采用COMMON_PASSWORD_VERIFY(category=WITHDRAW),但IM3/BIMA渠道跳过验密直接提交。
"**IM3/BIMA 渠道跳过验密直接提交**"
确认页提交按钮门控为勾选同意且RIPLAY iframe加载完成,加载失败无重试UI则按钮持续禁用。
"**提交按钮门控 = 勾选同意 && iframe 加载完成**(加载失败无重试 UI,按钮持续禁用)"
提交coreTransApplyLoan返回STATUS='1212'为支用反欺诈引擎的挑战出口,按RULE_CODE_LIST_PARTNER走OTP/刷脸增强验证。
"`STATUS='1212'` = **支用反欺诈引擎的挑战出口**"
提交后轮询coreTransQueryTransactionStatus间隔2s最多6次,LOAN_STATUS='O'(WAIT)继续轮询,超时或异常一律落失败页。
"**2s × 最多 6 次**;`LOAN_STATUS='O'`(WAIT) 继续;**超时/异常一律落失败页**"
轮询FAIL且ACTION_CODE含LRCLNR/LRCLNL时跳QUOTA_LIMIT页,表示授信刷新后新额度小于取现额,Try again则刷新额度回金额页。
"FAIL 且 `ACTION_CODE` 含 `LRCLNR/LRCLNL` → **QUOTA_LIMIT 页**(授信刷新后新额度<取现额,Try again → 刷新额度回金额页)"
交易详情页Repay按钮的出现条件为交易SUCCESSFUL且有未还期,点击进入提前结清流(EARLY_REPAYMENT+receiptId)。
"**Repay 按钮** = 交易 SUCCESSFUL 且有未还期 → 提前结清流(EARLY_REPAYMENT + receiptId)"