## ADDED Requirements ### Requirement: 提交/替换提现资料资格 代理本人 MUST 能提交或替换提现资料资格,调用 `POST /api/admin/shops/{shop_id}/withdrawal-qualifications`,请求体包含 `subject_type`、`subject_code`、`legal_person_id_card` 与合同、身份证正反面、营业执照、门头照、发票等 `*_file_key`,以及 `invoice_title`、`invoice_subject_code`;附件 MUST 先通过对象存储上传接口取得 `file_key` 再提交。 #### Scenario: 提交资格成功 - **GIVEN** 代理本人已登录并选好主体类型 - **WHEN** 其上传资料并提交 - **THEN** 前端 MUST 先取得全部附件 `file_key` - **AND** 再调用提交接口并在成功后刷新资格列表 #### Scenario: 替换资格使旧资格失效 - **GIVEN** 已存在通过审批的资格 - **WHEN** 代理提交合同或法人身份证变更 - **THEN** 旧资格 MUST 立即失效 - **AND** 新资格 MUST 重新审批通过后方可提现 ### Requirement: 查询提现资料资格 代理本人 MUST 能分页查询提现资料资格,调用 `GET /api/admin/shops/{shop_id}/withdrawal-qualifications`(`page` / `page_size` / `status`);响应 MUST 展示脱敏的 `subject_code_masked` 与 `legal_person_id_card_masked`,并展示 `status`、`approval_status`、`invalid_reason`、`invalidated_at` 与各附件 `file_key` 预览。 #### Scenario: 查看资格版本与审批状态 - **GIVEN** 代理本人打开提现资料资格列表 - **WHEN** 接口返回资格记录 - **THEN** 列表 MUST 展示脱敏证件号与审批状态 - **AND** 证件号 MUST NOT 以明文展示 ### Requirement: 作废提现资料资格 超级管理员 MUST 能作废提现资料资格,调用 `POST /api/admin/withdrawal-qualifications/{id}/void`,`reason` 必填。 #### Scenario: 作废资格须填原因 - **GIVEN** 超级管理员打开作废弹窗 - **WHEN** 其未填写原因直接提交 - **THEN** 前端 MUST 阻止提交并提示填写原因 #### Scenario: 超管作废资格 - **GIVEN** 超级管理员选择一条资格 - **WHEN** 其填写原因并确认作废 - **THEN** 系统 MUST 调用作废接口并在成功后刷新列表 ### Requirement: 重提被驳回的提现 代理本人 MUST 能重提被驳回的提现,调用 `PUT /api/admin/shops/{shop_id}/withdrawal-requests/{id}`,请求体包含 `account_name`、`account_number`、`amount`、`withdrawal_method` 与 `invoice_keys`;成功响应返回新提现单(`withdrawal_no`、`actual_amount`、`fee`、`fee_rate`、`status`)。 #### Scenario: 重提被驳回的提现 - **GIVEN** 代理本人的提现申请被驳回 - **WHEN** 其修改信息并重新提交 - **THEN** 系统 MUST 调用重提接口 - **AND** 成功后 MUST 刷新提现记录并展示新单号 #### Scenario: 非驳回状态不可重提 - **GIVEN** 提现申请不是被驳回状态 - **WHEN** 代理尝试重提 - **THEN** 重提入口 MUST 不可用或不展示 ### Requirement: 提现申请详情 代理本人 MUST 能查看提现申请详情,调用 `GET /api/admin/shops/{shop_id}/withdrawal-requests/{id}`;响应包含 `reject_reason`、`anomaly_flag`、`anomaly_name`、`anomaly_reason` 与 `attempts` 尝试记录,前端 MUST 展示这些字段。 #### Scenario: 查看提现详情 - **GIVEN** 代理本人点击提现记录 - **WHEN** 详情返回 - **THEN** 页面 MUST 展示提现金额、实际到账、手续费、状态 - **AND** 展示驳回原因、异常标记与尝试记录