Files
uniprop-manual/prop-acc/scenarios/prepaid/unfreeze-after-verification.md

181 lines
6.3 KiB
Markdown
Raw Permalink Normal View History

2026-05-25 23:32:57 +08:00
---
title: prop-acc · prepaid · 场景 - 核实后解冻
aliases:
- 解冻预存款账户
- 风控核实后解冻
- unfreeze-after-verification
- 场景-预存款解冻
tags:
- 场景
- prop-acc
- 预存款
- 冻结
audience:
- 业务人员
- 风控
status: 已发布
sub_feature: prepaid
last_review: 2026-05-25
code_version: 2026-05-22
---
# 场景:核实后解冻
[[freeze-suspected-fraud|冻结]] 后,物业核实业户身份和操作合法性,**解冻账户**回到 Active,业户继续正常使用。是冻结的对称操作。
> [!info] Action 名称的历史
> 解冻的 Action 在代码里叫 **`ReactivateAccountAction`**(字面"重新激活"),但**实际行为只允许 Frozen → Active**(等价解冻)。UI 文案已统一为"解冻",图标 `lock-open`,与 deposit 模块对齐。详见 [[account-state-machine]]"ReactivateAccountAction = 解冻"段。
## 典型情境
> [!example] 真实情境
> 王女士的预存款账户因风控异常被冻结(详见 [[freeze-suspected-fraud]])。物业联系她核实:
>
> - 确认昨天大额充值是**本人操作**(她准备一次性存够全年物业费)
> - 微信号给其他账户转钱是给亲戚朋友转账,与预存款无关(只是该微信刚好绑了多个预存款账户在风控规则下触发了关联)
> - 手机号变更是因为旧号停用,她已到运营商办手续
>
> 物业核实后:王女士身份属实、所有操作合法。**立即解冻**。
## 业务人员视角
### 第 1 步:核实业户身份与操作
- 业户当面 / 视频 / 公证 提供身份证 + 房产证 / 租赁合同
- 核对近期操作是否本人(看充值时间、IP、设备)
- 核对手机号变更证明(运营商凭证)
- 核对资金来源说明(若大额异常)
> [!warning] 核实必须留书面凭证
> - 业户签字声明
> - 微信 / 邮件确认截图
> - 任何后续争议时的依据
### 第 2 步:打开账户
后台 → 预存款 → 找到王女士账户(Frozen)→ 进 `ViewPrepaidAccount`
状态显示 "🧊 Frozen",右上角只有 `ReactivateAccountAction`(标签"解冻")可点,其他写入按钮全灰。
### 第 3 步:点击解冻
> [!warning] 按钮可见性
> 守护:`status === Frozen` + Policy `->authorize('unfreeze')`。
>
> **修过的语义**:历史代码允许 `!= Active` 都可见(等于"既能撤销 Frozen 也能撤销 Closed"),issue.md Q4 改为**只允许 Frozen → Active**,等价解冻,**禁止从 Closed 撤销关账**。
Modal 表单:
| 字段 | 填什么 |
|---|---|
| **解冻事由(reason)** | 必填,如 "风控核实:大额充值与微信转账均为本人操作,手机号变更已凭运营商证明确认" |
### 第 4 步:提交
系统调 `PrepaidAccount::unfreeze($reason)`(或同名方法):
1. 校验 status === Frozen
2. 更新 `status=Active`
3.`meta.unfreeze_reason` 记解冻事由
4.`meta.unfrozen_at` 记解冻时间
5. (可选)`meta.freeze_history[]` 追加这次冻结-解冻的完整记录
**不产生** PrepaidTransaction(状态变更,无资金动作)。
### 第 5 步:通知业户
- "您的预存款账户已解冻,现可正常使用"
- 业务人员 / 运维监督看后续是否有异常
## 业户视角
### 您会感受到什么
- 收到通知:"您的预存款账户已解冻,事由:经核实身份与操作合法"
- 小程序"我的预存款"显示 "✅ Active"
- 充值 / 消费 / 退款 重新可用
- 余额未变(冻结期间不动)
### 您要做什么
继续正常用账户。建议:
- 留意自己账户的异常操作
- 重要变更(手机号、绑定微信)及时告知物业
- 大额充值(>10000)建议提前告知物业,避免风控误报
## 系统流程
```mermaid
sequenceDiagram
participant 业户
participant 物业
participant Filament
participant PrepaidAccount
participant 数据库
Note over 业户,物业: 核实业户身份和操作合法
业户->>物业: 提供身份证 / 房产证 / 操作说明
物业->>物业: 核实通过
物业->>Filament: ViewPrepaidAccount → ReactivateAccountAction(reason)
Filament->>PrepaidAccount: unfreeze(reason)
PrepaidAccount->>PrepaidAccount: status === Frozen? yes
PrepaidAccount->>数据库: 更新 status=Active, meta.unfreeze_reason
数据库-->>Filament: ok
Filament-->>物业: 成功
物业->>业户: 通知解冻
Note over 业户: 后续正常充值 / 消费 / 退款
```
## 流水台账(本场景不动)
| 流水 | 说明 |
|---|---|
| (无)| 解冻是状态变更,无资金动作 |
只有 `PrepaidAccount.status` 字段从 Frozen → Active,`meta` 多几个审计字段。
## 与 deposit 解冻的差异
| 维度 | deposit unfreeze-after-mediation | prepaid 解冻(本场景) |
|---|---|---|
| 业务上下文 | 押金纠纷调解 | 风控核实 / 误冻撤销 |
| Action 名 | `UnfreezeAction` | `ReactivateAccountAction`(字面历史包袱) |
| 后续操作 | 调解结果决定 refund / forfeit | 直接恢复使用 |
| 通常频率 | 中(押金纠纷有时间区) | 罕见(风控误报)|
## 常见问题
> [!question] 误冻立即解冻可以吗?
> 可以,且**推荐立即**。误冻每多挂一分钟,业户体验越差。
> [!question] 解冻后业户能立即充值 / 消费吗?
> 能。解冻是同步事务,提交后立即生效。
> [!question] 多次冻结-解冻同一账户会有问题吗?
> 不会。账户可以在 `Active ↔ Frozen` 之间多次切换。如果业务上常见,`meta.freeze_history[]` 数组(若已实现)记历次完整记录。
> [!question] 解冻后业户再次触发风控怎么办?
> 重复 [[freeze-suspected-fraud|冻结]] 流程 → 这次更严格核实。多次触发风控的业户可能是真的高风险,需法务介入。
> [!question] 解冻必须要书面凭证吗?
> 系统层面不强制(`reason` 字段非空即可)。**业务层面强烈推荐**,留书面凭证防纠纷。
> [!question] 解冻能从 Closed 状态做吗?
> **不能**。`ReactivateAccountAction` 只允许 Frozen → Active。Closed 永久(`canBeReopened` 永远 false)。这是 issue.md Q4 第二轮明确修的语义。
## 异常分支
- 核实不通过(确认欺诈)→ 留 Frozen,法务介入
- 业户长期不出现 → 留 Frozen,等业户出现或法律时效
- 解冻后再次异常 → 重新 [[freeze-suspected-fraud|冻结]]
## 相关文档
- [[freeze-suspected-fraud]]
- [[account-state-machine]]
- [[exception-refund-on-frozen]]
- [[../deposit/unfreeze-after-mediation]](deposit 解冻场景对比)