Files
zkxw/docs/superpowers/specs/2026-10-13-mobile-protocol-transfer-finance-parity-design.md
T
2026-10-14 12:32:03 +08:00

4.1 KiB
Raw Blame History

移动端协议单:转账 / 提交财务确认对齐 Web — 设计说明

日期: 2026-10-13
状态: 已确认(产品口径纠正后)
范围: mobile-oa-h5 协议单编辑内嵌转账;去掉协议审核操作;差异表校正
前置: P1 缴费面板、P2 客户检索/金额联动、P3 客户关联与详情只读

1. 目标

  1. 协议单内转账登记、保存、提交财务确认、撤回与 Web SamplePaymentPanel 行为一致。
  2. 按产品口径明确:作废/生效/过期/转科研、退费、开票、储存证/保险办理、审核、管理端角色 —— 仅 Web。
  3. 纠正入口描述:Web / 小程序均通过 细胞存储 / 科研捐赠 切换业务来源。

2. 差异表(校正后)

能力 Web 小程序 决策
入口切换 细胞存储 / 科研捐赠 同左 已对齐;此前描述错误
列表筛选 较完整 简化 接受;后续再完善
协议内转账 / 提交财务确认 / 撤回 有 原先仅「缴费信息」模块 本轮对齐到协议单内
作废 / 生效 / 过期 / 转科研 有 无 仅 Web
退费登记 有 无 仅 Web
开票 有 无 仅 Web
储存证 / 保险办理 有 详情只读、无办理 仅 Web 办理;详情只读保留
审核操作 有 去掉入口 仅 Web;详情可保留只读审核记录
管理端角色体系 有 不镜像 仅 Web;市场 specialist/manager 维持现状

3. 协议内转账(对齐 Web)

3.1 UX

在 ProtocolSamplePaymentPanel 每个应缴批次下增加转账区(对齐 Web):

  • 展示已缴 / 欠缴摘要
  • 添加转账
  • 行内字段:转账方式、金额、时间、凭证、备注;只读财务备注、付款状态
  • 操作:保存、提交财务确认(dfj)、撤回(jfqrz)、删除(未锁定)
  • payStatus === 'yjf':整行锁定(与 Web isTransferLocked 一致)
  • 协议未保存或批次无 schedule.id:禁止保存转账,提示先保存协议

3.2 API(复用既有缴费转账)

不新建协议域转账接口。使用市场缴费转账:

操作 方法 路径
创建 POST /mini/market/{role}/payment-transfers(body 含 scheduleId)
更新 PUT /mini/market/{role}/payment-transfers/{id}
提交 POST .../submit
撤回 POST .../withdraw
凭证 POST 既有 uploadMarketAttachment(module 可用 payment 或 protocol)

权限:调用方需具备缴费权限(与独立「缴费信息」模块相同)。无缴费权限时隐藏转账操作区,仅只读展示已有转账(若详情带回)。

3.3 前端结构

  • ProtocolSamplePaymentPanel 增加 props:protocolId、marketRole(或完整 context)、transferTypes、canManageTransfers
  • 转账写操作走 performMarketAction / 薄封装(payment module + register-transfer / edit-transfer / submit / withdraw)
  • 保存成功后把返回字段写回对应 sch.transfers[i],再 emit v-model
  • 凭证上传复用 PresignAttachmentUploader 或等价组件;URL 序列化规则与缴费模块一致

3.4 与「缴费信息」模块关系

独立缴费模块可保留;协议单内转账是同一后端能力的第二入口,避免市场人员必须离开协议单才能登记转账。

4. 去掉小程序协议审核操作

  • 前端 action-policy / 列表展示:协议白名单去掉 audit
  • 后端 allowed_actions('protocol'):市场端不再返回 audit(路由可保留但不暴露给 UI)
  • 详情只读「审核记录」分区保留

5. 非目标

  • 作废/生效/过期/转科研、退费、开票、储存证/保险办理
  • 列表筛选增强
  • Web 管理端改动
  • 删除独立「缴费信息」模块

6. 测试要点

  • 面板契约:存在添加转账 / 提交财务确认 / 撤回文案或绑定
  • 未保存协议时保存转账给出明确提示(单测状态机或 UI 契约)
  • audit 不再出现在协议 moduleActions / collectAllowedActions 交集
  • 既有缴费转账路径测试不被破坏