Files
zkxw/openspec/changes/project-business-statistics/specs/project-management/spec.md
T
zlwu 79ca01ac0d feat(project): show presign counts as a statistics column
Group presign counts by project and team, include totals and unassigned rows, and reuse count drill-down. Remove the standalone footer while retaining presignTotal compatibility and the four formal business types.

Related to issue #13. Independent source review completed; no tests or builds run under user self-test arrangement.
2026-11-04 14:53:07 +08:00

6.9 KiB

ADDED Requirements

Requirement: 按业务识别历史归属单据

历史归属维护 SHALL 按细胞存储、科研捐赠、中试服务、基础实验展示四个 tab,并提供对应业务识别字段和关键词搜索;列表保持主单分页,右侧固定归属与审计操作。

Scenario: 存储和捐赠以样本编码识别

  • WHEN 查看细胞存储或科研捐赠 tab
  • THEN 展示样本编码列而非协议单号/捐赠单号列;多个有效编码在同一主单行去重展示,无编码显示破折号,支持按任一编码搜索;跨租户或已删除的样本不用于展示和匹配,分页和归属仍以主单为单位。

Scenario: 按联系人或业务信息定位

  • WHEN 用户在某类业务输入姓名、电话、医院/专员、渠道/服务订单或课题/客户等该业务支持的关键词
  • THEN 仅返回当前租户及数据权限内匹配的有效主单,展示对应业务信息,多条子记录不重复计数;删除和跨租户关联数据不用于匹配或展示。

Scenario: 切换业务及请求竞争

  • WHEN 用户切换 tab 或旧请求在新请求后返回
  • THEN 切换时清空关键词、状态、项目组/项目并回到第一页,保留日期与仅未归属条件;过时响应不得覆盖当前业务的列表或计数,失败可重试且不保留旧列表。

Scenario: 业务联系信息权限

  • WHEN 仅有统计权限的用户读取统计钻取或尝试调用归属维护详情接口
  • THEN 统计专用详情接口按 project:statistics:list 返回其租户及主单数据权限内的业务识别和联系信息;归属维护详情接口仍拒绝无 project:assignment:edit 权限的访问,全部项目选择权限不扩大主单数据范围。

Scenario: 归属调整仍按关联链执行

  • WHEN 用户从某个业务 tab 调整归属
  • THEN 目标候选按该单据业务类型及项目权限加载,仍先预览关联单据再确认提交;关联预签约纳入预览和审计,不新增独立预签约 tab。

Requirement: 项目管理三级导航

Web SHALL 使用“项目 → 项目管理 → 项目组管理 / 项目管理 / 业务统计 / 历史归属维护”层级,复用现有导航组件;原页面权限、名称和功能保持。

Scenario: 现有角色升级

  • WHEN 执行项目管理分组迁移
  • THEN 保留子页面 ID 与原授权,仅为已授权子页面/编辑按钮的角色补齐目录祖先;全部项目选择权限仍独立挂在项目一级下,不授予管理页面权限。

Scenario: 旧地址访问

  • WHEN 访问 /project/{页面} 或 /market/project-management/{页面}
  • THEN 携带原查询参数及 hash 跳转至 /project/management/{页面},目标仍按原页面权限检查。

Requirement: 组织信息与业务地点独立

系统 SHALL 维护项目组负责人、成员及区域医院资料,区域医院仅为信息记录。

Scenario: 修改负责医院

  • WHEN 项目组医院发生修改
  • THEN 已有订单、业务地区医院候选与权限均保持原有行为。

Requirement: 稳定且受控的项目归属

系统 SHALL 在业务主单保存项目归属,限制同租户授权选择,人员调整不得迁移历史订单。

Scenario: 转换单据

  • WHEN 预签约转协议或存储捐赠互转
  • THEN 目标继承来源项目,记录来源关联。

Scenario: 历史单据编辑

  • WHEN 已停用项目的历史单据修改其他字段
  • THEN 保留其项目归属,不因项目停用拒绝无关编辑。

Scenario: 归属纠正

  • WHEN 有授权的管理员预览并确认调整关联单据归属
  • THEN 服务端核对权限、关联集合及旧值,统一事务更新并留审计;不一致时拒绝。

Requirement: 权限内统计

系统 SHALL 按认证租户和现有数据权限统计四类业务,预签约另计,未归属单据单列。

Scenario: 预签约独立统计列

  • WHEN 按项目或项目组查看业务统计
  • THEN 表格以“预签约”独立列展示每组、业务总量、未归属的全状态有效预签约单数,包含只有预签约的组;移除左下角独立计数文字,点击数量可查看同筛选明细,不将预签约数量加入四类正式业务数量。

Scenario: 汇总钻取

  • WHEN 用户打开某项目的某类业务明细
  • THEN 明细总数与相同筛选条件汇总一致,不因子行联接重复计数。

Scenario: 四类统计明细展示业务字段

  • WHEN 点击细胞存储、科研捐赠、中试服务、基础实验的统计数量
  • THEN 原明细弹窗复用历史归属维护对应 tab 的业务列与关键词能力,存储/捐赠显示样本编码,保留汇总传入的筛选条件和只读权限,不显示归属维护操作;预签约仍沿用原行为。

Requirement: 沿用现有界面样式

Web与移动 SHALL 复用同端现有组件、布局模式和全局样式。

Scenario: 新增管理界面

  • WHEN 实现已确认Figma布局
  • THEN 列表、弹窗、按钮、标签及选择器遵循现有界面,不引入平行主题。

Requirement: 所属项目范围与独立全部项目权限

系统 SHALL 在 Web 和移动的所属项目候选及后端归属写入中使用同一范围:本人作为项目组负责人或有效成员所在组的项目,或显式 project:project:all 授权下的当前租户项目。多组、有效角色及职位继承角色取并集。普通管理员、项目负责人或归属维护权限本身不得绕过组成员限制;super_admin 沿用系统全部权限语义且不得跨租户。

Scenario: 无跨组权限

  • WHEN 用户未加入某项目组且不是该组负责人
  • THEN 下拉框不返回其项目,伪造项目 ID 提交被后端拒绝;仅担任该项目负责人不构成组成员资格。

Scenario: 分配或撤销全部项目

  • WHEN 角色或继承职位授予全部项目权限,或该授权被撤销/停用
  • THEN 后续候选和写入即时按有效授权判定,其他租户、停用项目和不支持业务类型仍不可新选。

Scenario: 历史归属与数据权限

  • WHEN 用户调组或项目停用后查看、编辑历史订单
  • THEN 原项目仍可回显且无关编辑保留归属;筛选候选取项目范围与原业务数据范围交集,全部项目权限不扩大订单查看和维护权限。

Scenario: 禁止业务用户自行授权

  • WHEN 普通业务管理员直接调用角色菜单、用户角色/职位、职位角色/用户或菜单权限码等变更接口
  • THEN 缺少对应系统管理权限时返回拒绝;有管理权限者也只能变更当前租户目标和关联,用户账号重置/启停同样受管理权限保护。

Scenario: 角色菜单保存

  • WHEN 管理员只勾选全部项目功能权限
  • THEN 保存其同租户祖先但不授予其他功能,断链/循环/跨租户节点导致整次保存拒绝。