审核队列 · 1,415 条待审
出处硬校验:锚点须在 K0 命中;手填出处强制 inferred。批量通过:规则类直接入 rules.yaml(一个 commit); 定义类需人工归簇请单张过。
建模纪律 · 知识分类骨架(11 类)—— 判不准时点开对锚点
没通过实体四条的,不是扔掉,是归位。每类锚在不同的数据形态上——锚不对就是归错了。
速判:占一张实体表 → 实体;按时间追加流水 → 事件;某实体会流转的取值 → 状态维;静态描述值 → 属性; 一组可选值 → 枚举;连两个实体 → 关系;多事件编排 → 流程;「如果…就…」→ 规则;施加的操作 → 动作;算出来的量 → 指标。 全文见仓库 建模纪律.md「纪律 2」。
修正后:逾期重组 banner 提到 overdueTimes 计数分支之上,overdueTimes>1 的多次逾期用户也正常展示 Adjust CTA。
"逾期重组 banner 被 `overdueTimes` 计数分支挡掉、多次逾期用户看不到 CTA → banner 提到分支之上,`overdueTimes>1` 也正常展示"
修正后:账单页 SIKLUS TAGIHAN 与 DETAIL TAGIHAN 的 Adjust CTA 与首页同款走 needRestructurePrepay → PrepayIntro,不再绕过预付步骤。
"SIKLUS TAGIHAN(`bill/OverDues.vue`)与 DETAIL TAGIHAN(`bill/components/BillCard.vue`)的 Adjust CTA 直接推 NewLoan、绕过首页强制的预付步骤 → 与首页同款走 `needRestructurePrepay` → Prepa"
修正后:PrepayIntro「Remaining total amount」展示剩余应还总额 ACCT_SUM_PAID_OUT(本金+利息+罚息+费用),试算 AMOUNT 不变仍用剩余本金。
"展示剩余**本金** `ACCT_PRIN_PAID_OUT` → 展示剩余**应还总额** `ACCT_SUM_PAID_OUT`(本金+利息+罚息+费用);试算 `AMOUNT` 不变仍用剩余本金"
修正后:逾期直入重组的提交本金 LOAN_INIT_PRIN 改取精确剩余本金 ACCT_PRIN_PAID_OUT,与展示金额、试算入参三者对齐;MULTI_SETTLE 分支不变。
"`LOAN_INIT_PRIN` 取试算回显值 → 改取精确剩余本金 `ACCT_PRIN_PAID_OUT`(residualPrincipal),与展示金额、试算入参三者对齐;MULTI_SETTLE 分支不变"
修正后:重组失败 Try Again 路由对逾期直入用户回 NewLoan?source=overdue(与入口一致),不再一律回多借据选择页。
"一律回多借据选择页(adjust-repayment-plan)→ 逾期直入用户回 `NewLoan?source=overdue`(与入口一致)"
预付门槛判定来源改为专用 AMS 预付状态接口 restructurePrepayStatus;命中条件为 restructurePrepaySwitch='Y' 且 prepayRequired='Y' 且 prepayStatus≠'PAID'(PENDING/VERIFYING 均拦);开关关或接口缺失则不设门槛直接放行。
"预付 gate 的输入改从专用 AMS 预付状态读接口(`payLaterRepayment.restructurePrepayStatus`)取,**不再来自 negotiate**;命中 = 总开关 `restructurePrepaySwitch='Y'` 且 `prepayRequired='Y'` 且 `pr"
白名单用户当期账单金额=0 或账单已还清、且下一个未出账单金额>0 时,模块展示下个未出账账单金额并新增展期入口,点击进入现有展期流程;其他账单状态按原有展示。
"当白名单用户**当期账单金额 = 0 或账单已还清**、且**下一个未出账单金额 > 0** 时,模块展示下个未出账的账单金额,并在此模块下新增**展期入口**,点击进入现有展期流程;其他账单状态按原有展示"
展期入口与 06 转分期底层是同一个 EXTENSION(展期)能力,走 TXN_CODE=EXTENSION / TRANSACTION_TYPE='EX',两个入口复用同一笔后台交易。
"转分期走 `TXN_CODE=EXTENSION` / `TRANSACTION_TYPE='EX'`(`service/convert/Select.vue:206`、`service/convert/List.vue:84`)"
PayLater 提前还款费(Biaya Pelunasan dipercepat)为提前结清金额的 8%。
"**PayLater 提前还款费(Biaya Pelunasan dipercepat)= 提前结清金额的 8%**"
逾期费(Biaya Keterlambatan)为逾期账单金额的 0.3%/日;账单到期日为每月 10 日。
"逾期费(Biaya Keterlambatan)= 逾期账单金额的 **0.3%/日**;账单到期日为每月 **10 日**"
Instant Cash 的提前还款费为 10%(与 PayLater 的 8% 不同)。
"Instant Cash 的提前还款费为 **10%**(与 PayLater 的 8% 不同)"
最小还款能力门控:flexCode[2]==='1' 且 minimumRepaymentSwitch='Y' 且满足金额门槛。
"最小还款 | `flexCode[2]==='1'` + `minimumRepaymentSwitch='Y'` + 金额门槛"
账单分期能力门控:repayByInstallmentSwitch='Y' 且 flexCode 第 1 位命中。
"账单分期 | `repayByInstallmentSwitch='Y'`(+ flexCode第1位)"
逾期重组能力门控:flexCode.charAt(18)∈{'1','2'} 且 loanRestructuringSwitch='Y' 且满足逾期 carve-out 且 DPD∈[30,90](仅逾期分支);首页入口另受维护窗口 23:30–24:00 拦截。
"逾期重组 | `flexCode.charAt(18)∈{'1','2'}` + `loanRestructuringSwitch='Y'` + 逾期 carve-out + **DPD∈[30,90](仅逾期分支,K-S-2607)**;首页入口另受维护窗口 23:30–24:00 拦截"
逾期 carve-out:逾期场景在读 Flex 第 19 位 + loanRestructuringSwitch 之上额外叠加 loanRestructuringOverdueSwitch,isAdjustRepayAllow 先判断 isOverDue && loanRestructuringOverdueSwitch==='N' 时返回 false,再读位段。
"逾期场景在此之上**额外**叠加后台开关 `loanRestructuringOverdueSwitch` carve-out——`isAdjustRepayAllow`(`home/Index.vue:783-787`)先 `if(isOverDue && loanRestructuringOverdueSwitch"
loanRestructuringOverdueSwitch=N 时即便 Flex 位段命中也禁用逾期入口;它是叠加的 carve-out,不取代位段读取。
"该开关=N 时即便位段命中也禁用逾期入口,但它是叠加的 carve-out,不取代位段读取"
各类还款都需接合同(RIPLAY)iframe 并做密码验证(COMMON_PASSWORD_VERIFY)。
"各还款都接合同(RIPLAY)iframe + 密码验证(`COMMON_PASSWORD_VERIFY`)"
两个还款页分流:isY001 或提前结清走基础页;否则走常规页。
"分流在 `utils/view.js:96-160`(isY001 或提前结清 → 基础页;否则 → 常规页)"
基础还款页面向 Y001 与提前结清场景,常规还款页面向非 Y001 的账单还款
"面向 | Y001 / 提前结清 | 非 Y001 账单还款"
基础还款页金额校验允许部分还款,仅校验金额≤应还且≤钱包余额两条
"金额校验 | 允许部分;仅"≤应还、≤钱包余额"两条"
常规还款页当输入金额≥最低还款额且≠全额时首次弹出「Try minimum」弹窗
"「Try minimum」弹窗(金额≥最低且≠全额时首次弹)"
基础还款页验证走 PIN(scene=OTHER),IM3/BIMA 客群走 IOH OTP(category=REPAYMENT);常规还款页验证走 PIN
"验证 | PIN(scene=OTHER,category 按提前结清区分);**IM3/BIMA 走 IOH OTP**(category=REPAYMENT)| PIN"
基础还款页提交调用 coreTransApplyRepay,参数含 TXN_CODE(BillRepay/IOURepay)、REPAY_TYPE='VA'、TOT_AMOUNT、session,LOAN_LIST 仅结清时携带
"提交 | `coreTransApplyRepay{TXN_CODE: BillRepay/IOURepay, REPAY_TYPE:'VA', TOT_AMOUNT, session, LOAN_LIST(仅结清带)}`"
常规还款页全额提交同基础页但不带 LOAN_LIST,最低还款走 coreTransMinimumRepayApply
"全额同左(无 LOAN_LIST);最低走 `coreTransMinimumRepayApply`"
基础还款页结果轮询调用 coreTransQueryRepayResult,2s×8,Loading 15s
"轮询 | `coreTransQueryRepayResult{ORI_BIZ_SEQ_NO, ORI_MER_BIZ_NO}` 2s×8(Loading 15s)"
常规还款页轮询同接口但 Loading 30s,最低还款走 coreTransRepayInstallmentResult,2s×6
"同接口(Loading 30s);最低还款走 `coreTransRepayInstallmentResult{FLOW_NO}` 2s×6"
常规还款页最低还款成功页为 COMMON_RESULT_BILL_REPAY,含五态 status 1/2/3/5/6
"全额 `COMMON_RESULT` / 最低 `COMMON_RESULT_BILL_REPAY`(五态 status 1/2/3/5/6)"
基础还款页 Y001 有还款成功奖励链,常规还款页无
"Y001 奖励链 | 有(见 D.2)| 无"
还款轮询以 REPAY_STATUS='S' 且 MARKET_CODE_HANDLE_STATUS='END'(调额引擎处理完)为成功终态,PENDING 继续轮询
"轮询以 `REPAY_STATUS='S'` **且** `MARKET_CODE_HANDLE_STATUS='END'`(调额引擎处理完)为成功终态,PENDING 继续轮"
Y001 还款成功后 Promise.all 并发三路奖励查询,凑齐后随成功页展示
"成功后 `Promise.all` 并发三路,凑齐后随成功页展示"