Files
break 5ed6b39deb
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
feat(收口): 补齐 8 月迭代缺口并同步 Spec 与证据链
- 新增六对成对迁移 000232–000237:H5 弹窗类型、退款结算标识与申请人备注、优先轮询事实字段与两个新终态、通道阈值命中留痕、手机号最近解绑人、提现资格校验留痕
- 退款:原因必填与申请人备注、来源支付与渠道流水冻结、线下处理流水号补录审计、按订单查询可选退款方式、企微审批材料补齐且新增字段缺失映射即明确失败
- 优先轮询:人工关闭、有效期到期独立周期任务、失败与过期人工重触发、事实字段与异常重试查询、资产解析端点只读投影
- 通道阈值:命中事实同事务留痕与命中记录查询;员工账单:列表筛选与详情投影;商户池:列表投影与统计周期语义;H5:弹窗类型与类别排序
- 手机号:有效关联数量与最近解绑人、短信验证码失败次数限制;导出:佣金明细十五列与报表序号列
- 时间筛选:三处新增筛选纳入统一严格解析契约,员工账单产生时间参数改名
- 同步 12 份主 Spec 需求、两端点与异步任务证据链,门禁 context-health 与 OpenSpec 校验通过
2026-09-18 15:34:29 +08:00

5.4 KiB
Raw Blame History

Purpose

补齐员工代收款账单列表与详情在原始需求(111.md §5.2.1、§5.2.2)中要求、当前实现未提供的查询筛选与投影能力,并将「未核销金额」与「剩余可核销金额」两个口径显式区分,避免列表与统计口径混淆。

ADDED Requirements

Requirement: 员工账单列表查询与筛选

账单列表 SHALL 在既有可见性范围内支持以下筛选:账单编号(精确)、来源订单号(精确)、来源业务类型、账单状态、产生时间范围、核销通过时间范围、欠款人姓名或账号(模糊)、客户名称(模糊)。账单编号 MUST 为账单自身的唯一标识(即账单记录标识);系统 MUST NOT 为满足本要求新增编号字段或编号生成规则。欠款人姓名或账号与客户名称的模糊匹配 MUST 由服务端按去空白后的子串匹配实现MUST NOT 要求调用方先获得账号 ID 或客户 ID。

产生时间范围 MUST 使用统一参数名 start_timeend_time;核销通过时间范围 MUST 使用 decided_start_timedecided_end_time。两类时间参数 MUST 使用同一严格解析契约:取值为带显式时区的 RFC3339 秒级时间,解析结果归一为 UTC 瞬时筛选区间为闭区间含两端开始时间晚于结束时间时拒绝请求旧参数名与旧格式含仅日期的取值MUST 被拒绝MUST NOT 保留静默兼容或别名。

核销通过时间 MUST 取该账单经「状态为已通过的分摊」关联到的申请表审批终态时间;账单从未存在已通过分摊时该筛选 MUST 不命中该账单。系统 MUST NOT 使用分摊记录的释放时间作为核销通过时间:该字段在既有实现中同时承担「审批通过转为已核销」与「驳回或释放预占」两种语义。

列表响应 SHALL 同时返回「未核销金额」与「剩余可核销金额」两个金额:未核销金额 MUST 为应收金额减已核销金额;剩余可核销金额 MUST 为应收金额减已核销金额再减审批中预占金额,已关闭账单两者均为零。已核销金额大于应收金额(异常数据)时,两个金额 MUST 均按 0 返回MUST NOT 返回负数。列表 MUST NOT 因新增模糊筛选改变既有可见性规则:欠款人仅可见本人账单,超级管理员可见全部。

Scenario: 按账单编号精确查询

  • WHEN 超级管理员以账单编号筛选账单列表
  • THEN 系统返回该编号对应账单,且不返回其它账单

Scenario: 按核销通过时间筛选

  • WHEN 调用方以核销通过时间范围筛选
  • THEN 系统只返回在该范围内存在已通过分摊的账单,从未核销的账单不出现在结果中;筛选依据为该账单已通过分摊关联的申请表审批终态时间

Scenario: 拒绝旧时间参数与旧格式

  • WHEN 调用方携带旧参数名或仅日期、无时区、带小数秒的时间取值请求账单列表
  • THEN 系统以参数非法错误拒绝请求,且不返回任何账单

Scenario: 按员工姓名或客户名称模糊查询

  • WHEN 调用方提交员工姓名子串或客户名称子串
  • THEN 系统返回欠款人账号名称或客户名称包含该子串的账单,无需调用方提供账号 ID 或客户 ID

Scenario: 未核销金额与剩余可核销金额

  • GIVEN 一张应收 100 元、已核销 30 元且存在审批中预占 20 元的账单
  • WHEN 查询账单列表
  • THEN 未核销金额返回 70 元,剩余可核销金额返回 50 元

Scenario: 已关闭账单两个金额为零

  • WHEN 查询一张已关闭账单
  • THEN 未核销金额与剩余可核销金额均返回零,已核销金额保持关闭时的值

Requirement: 员工账单详情投影

账单详情 SHALL 在既有账单、来源、客户与员工信息之外,返回该账单的操作日志与来源订单快照。操作日志 MUST 取该账单维度既有审计事实的投影至少包含动作、操作账号名称、操作时间与变更前后摘要MUST NOT 包含支付凭证内容、完整收款信息或其它敏感原文。来源订单快照 MUST 取来源订单或来源充值记录的既有只读字段投影,至少包含来源单号、来源业务类型、来源实收或充值金额、来源创建时间与资产标识;客户与员工信息 MUST 复用账单创建时冻结的快照。来源记录不可读或字段缺失时 MUST 返回空值 MUST NOT 阻断详情响应MUST NOT 为此新增来源业务写入路径。

Scenario: 详情返回操作日志

  • WHEN 授权账号查询一条存在创建、提交与审批终态的账单详情
  • THEN 响应的操作日志按时间升序返回各次动作、操作账号名称、操作时间与前后值摘要

Scenario: 详情返回来源订单快照

  • GIVEN 账单来源为后台线下套餐订单或代理线下充值
  • WHEN 查询该账单详情
  • THEN 响应返回来源单号、来源业务类型、来源金额、来源创建时间与资产标识

Scenario: 来源记录不可读

  • GIVEN 账单来源记录已被物理删除或字段为空
  • WHEN 查询该账单详情
  • THEN 来源订单快照对应字段返回空值,详情其余内容正常返回

Scenario: 操作日志不含敏感原文

  • WHEN 账单存在包含凭证上传与收款方式变更的操作
  • THEN 操作日志只返回对象键引用、编码与名称摘要,不返回凭证内容或完整收款文本