material_manage_system/docs/MMS-用户故事-v2.3.md

1180 lines
58 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 物料管理系统(MMS)用户故事 v2.3
## 一、版本说明
本版本在 v2.2 基础上完成以下调整:
- 区分使用系统的经营组织与作为供应商、客户的业务伙伴。
- 建立组织级数据隔离和用户组织访问权限。
- 统一库存业务单据状态和过账规则。
- 库存按“组织 + 仓库 + 库位 + 物料”管理。
- 已过账业务不得直接修改或删除,错误通过撤销过账(冲销)纠正。
- 补充调拨、盘点、库存预留、库存流水、BOM 版本、审计和预警通知等用户故事。
- 明确物料主数据由技术人员负责创建、维护和作废,采购人员只维护供应商及采购属性。
- 主数据管理和 BOM 管理作为当前优先交付模块,并使用武汉真实数据副本完成验收。
本版本不包含且不考虑采购订单、销售订单、批次、序列号、保质期和库存成本核算,不预留相关字段及接口;后续如有明确业务需求,再作为独立版本进行设计和实现。
---
## 二、领域术语
| 术语 | 定义 |
| ---------------------- | -------------------------------- |
| 经营组织(Organization) | 使用系统并拥有物料、仓库、编码规则和业务单据的本方公司或核算主体 |
| 业务伙伴(Business Partner) | 与经营组织发生业务往来的外部公司,可同时承担供应商和客户角色 |
| 过账(Post) | 业务单据通过校验后正式写入库存流水并改变库存余额 |
| 撤销过账(冲销) | 使用反向流水抵消已过账单据的库存影响,内部状态为 Reverse,原单据和原流水均保留 |
| 账面库存 | 已完成过账、当前实际记录在库的数量 |
| 预留库存 | 已被制造、销售或领料需求占用,但尚未正式出库的数量 |
| 锁定库存 | 因盘点、质量或异常处理而暂不可使用的数量 |
| 可用库存 | 账面库存减去预留库存和锁定库存 |
| 在途库存 | 已从来源仓库发出、尚未被目标仓库接收的数量 |
### 2.1 通用数据归属
- 物料、编码规则、仓库、库位、库存、BOM、业务伙伴关系和业务单据必须归属一个经营组织。
- 同一业务伙伴基础资料可以被多个经营组织使用,但合作状态、供应商价格等业务关系按经营组织分别维护。
- 经营组织与业务伙伴必须使用独立的数据表:经营组织表示使用系统的本方公司或核算主体,业务伙伴表示外部供应商或客户,不得以一张通用“公司”表混合保存。
- 经营组织与业务伙伴通过独立关系表关联;伙伴在某个组织下的供应商/客户角色、合作状态、伙伴编码、结算条件和其他业务属性均保存在该关系中。
- 一个业务伙伴可以同时关联多个经营组织;各组织的伙伴角色、状态和业务属性互不影响,用户不得通过伙伴基础资料越权查看其他组织的合作关系。
- 用户只能访问被授权经营组织的数据;切换经营组织后,查询、导入、导出和操作均限定在当前组织。
- 物料编码在同一经营组织内唯一,不要求跨经营组织唯一。
### 2.2 库存数据模型
- 库存最小管理维度为:经营组织、仓库、库位、物料。
- 数量使用可配置精度的十进制数,默认最大六位小数。
- 所有库存以物料基本计量单位记账;其他单位必须按有效换算规则转换。
- 默认禁止负库存。并发扣减时必须在同一事务内重新校验可用库存。
- 作废物料不得发生新的普通出入库业务,但允许查询历史及执行合法的撤销过账(冲销)。
- 停用仓库或库位不得发生新业务;存在账面、预留、锁定或在途库存时不得停用。
### 2.3 单据状态与过账
普通入库单、出库单和盘点调整单使用以下状态:
| 状态 | 说明 |
| --------- | --------------------- |
| draft | 草稿,可编辑、可删除,不影响库存 |
| submitted | 已提交,等待确认或审批,不影响库存 |
| posted | 已过账,不可编辑、不可删除,已产生库存流水 |
| reversed | 已完成撤销过账(冲销),保留原单据和正反向流水 |
| cancelled | 未过账前取消,不影响库存 |
通用规则:
- 只有过账动作能够改变库存。
- 单据头、单据明细、库存流水和库存余额必须在同一事务中处理。
- 客户端提交业务操作时必须携带幂等键;相同幂等键重复提交不得重复影响库存。
- 已过账单据不可修改、不可物理删除,只能按权限执行撤销过账(冲销)。
- 所有状态迁移必须校验当前状态、操作者权限和数据版本。
### 2.4 删除、停用与追溯
- 未被业务引用的草稿或测试数据可以物理删除。
- 已被业务引用的物料、业务伙伴、仓库、库位和 BOM 版本只能停用或作废。
- 已过账单据、库存流水和审计日志禁止物理删除和直接修改。
- 关键变更必须记录经营组织、业务对象、操作类型、操作者、操作时间、修改前后值、请求标识和来源终端。
---
## 三、角色定义
| 角色 | 职责描述 |
| ----- | ----------------------------- |
| 仓库管理员 | 物料入库、出库、调拨、盘点、库存查询和制造订单仓库执行 |
| 采购人员 | 供应商管理、物料供应商关系、价格、最小订购量、供货周期和库存预警处理 |
| 技术人员 | 物料主数据创建、修改、作废、编码申请、BOM、物料技术参数和替代料维护 |
| 生产人员 | 制造订单发起、执行跟踪、库存预留和完工确认 |
| 销售人员 | 业务伙伴客户管理和成品可用库存查询 |
| 超级管理员 | 拥有全部功能权限和全部经营组织、仓库的数据权限,负责平台配置、业务管理和应急处理 |
说明:销售订单和采购订单不在本版本范围内,角色职责不再将其作为已实现能力。
---
## 四、供应商状态说明
| 状态值 | 说明 |
| ---------- | ------------- |
| potential | 潜在供应商 |
| pending | 待导入,已接触但未正式合作 |
| active | 正常合作 |
| suspended | 暂停合作 |
| eliminated | 淘汰 |
只有 active 状态的供应商可以被新的采购入库业务选用;历史单据和撤销过账(冲销)不受此限制。
---
## 五、功能模块与用户故事
### 5.1 经营组织与数据隔离
#### 故事 #ORG-001:多组织数据隔离及用户可访问组织配置
作为|超级管理员
我想要|创建、启用或停用经营组织,并配置用户可访问的组织及默认组织
以便|多个经营组织共用系统时,业务数据保持隔离且用户只能访问授权范围
验收标准:
- 经营组织至少包含组织编码、名称、状态、默认时区和创建时间。
- 组织编码全局唯一,启用后不可修改。
- 前端设置独立的“公司组织”一级模块,位于“物料主数据”和“业务伙伴”之间,下设“组织管理”“用户管理”“角色与权限”三个子菜单。
- “组织管理”负责本方经营组织的新增、查询、修改、启用和停用,不得在该页面维护供应商或客户。
- 用户可以被授权访问一个或多个经营组织,并可配置一个默认组织。
- 超级管理员自动拥有全部经营组织和仓库的数据权限,无需逐项授权。
- 北京、武汉等公司或分公司分别建立为独立经营组织,各自拥有独立的编码规则、主数据、仓库、库存、供应商关系和业务单据。
- 经营组织只保存本方组织资料,不保存供应商、客户角色或合作状态;数据库中 `organizations` 与 `business_partners` 必须分表保存。
- 物料、编码规则、仓库、库位、库存、BOM、供应商关系及业务单据必须直接包含 organization_id 外键。
- 用户可属于多个经营组织,因此通过用户—组织关系表保存归属和权限,不在用户表中使用单一 organization_id 限制。
- 用户登录后只能查询和操作授权组织的数据。
- 用户登录后进入默认经营组织,并可通过页面左上角的组织切换器切换到其他已授权组织。
- 切换经营组织后,系统清空上一组织的页面缓存并重新加载菜单、主数据、仓库和权限范围。
- API 不得仅依赖前端选择,必须在服务端校验当前组织和用户授权关系。
- 导入、导出、统计、WebSocket 推送和后台任务均遵守相同组织边界。
- 存在有效业务数据的组织只能停用,不得物理删除。
- 切换组织及组织授权变更写入审计日志。
---
### 5.2 编码规则管理
#### 故事 #CODE-001:超级管理员配置编码规则
作为|超级管理员
我想要|为每个经营组织配置独立的物料编码规则,包括物料类别、前缀和流水号位数
以便|各经营组织按自己的规则生成编码,互不冲突
验收标准:
- 编码规则按“经营组织 + 物料类别”唯一。
- 已使用的流水号不得回收或重复分配。
- 修改规则只影响后续生成的编码,不修改已有物料编码。
- 流水号达到最大值时禁止继续生成,并返回明确原因。
#### 故事 #CODE-002:自动生成物料编码
作为|技术人员
我想要|选择当前经营组织和物料类别后,由系统生成下一个可用编码
以便|避免手工编写编码和重复
#### 故事 #CODE-003:并发申请防重
作为|系统
我想要|在多用户同时申请编码时,以事务和唯一约束保证编码不重复
以便|确保同一经营组织内的物料编码唯一
验收标准:
- 并发申请不得返回相同编码。
- 编码生成失败或物料创建回滚后,已分配编码默认不再重新使用。
- 数据库必须存在“经营组织 + 物料编码”唯一约束。
#### 故事 #CODE-004:获取编码规则列表
作为|采购人员或技术人员
我想要|查看当前经营组织的物料类别及编码规则
以便|了解如何申请新编码
---
### 5.3 物料主数据
#### 故事 #MD-001:物料主数据创建
作为|技术人员
我想要|在当前经营组织下创建物料主数据
以便|为仓库和制造业务提供可靠的基础信息
验收标准:
- 必填字段包括物料编码、名称、物料类型、物料分类、基本计量单位和状态。
- 物料编码在当前经营组织内唯一。
- 创建前执行重复物料检查,并由用户确认疑似重复结果。
- 技术人员根据产品设计或研发需求决定是否引入新物料;采购人员不得直接创建物料条目。
- 创建成功写入审计日志。
#### 故事 #MD-002:物料主数据查询
作为|仓库管理员、采购人员、销售人员或技术人员
我想要|按物料编号、名称、分类、类型和状态查询当前组织的物料
以便|确认物料信息或了解产品资料
验收标准:
- 主数据列表至少显示物料编码、名称、规格、物料类型、大类、小类、基本单位和状态。
- 物料列表、详情和编辑表单不显示库存数量、可用数量、预警阈值或库存状态,也不得调用库存接口拼接这些字段。
- 列表顶部提供大类、小类、物料类型、状态和关键词筛选。
- 关键词支持对物料编码、名称、规格和制造商型号进行模糊搜索。
- 小类选项随所选大类联动;清除大类时同时清除无效的小类条件。
- 点击列表中的“详情”先只读查看物料;有修改权限的人员可在详情中点击“编辑”进入编辑状态,保存后回到只读详情,取消编辑或关闭时丢弃未保存内容。采购人员可在详情页维护供应商信息。
- 列表提供单个新增、批量导入和批量导出入口,并根据角色权限显示。
#### 故事 #MD-003:物料主数据修改
作为|技术人员
我想要|修改物料的名称、规格、分类和技术参数
以便|保持物料信息准确
验收标准:
- 物料编码和所属经营组织不可修改。
- 物料名称、规格、分类、类型、基本单位和技术参数只允许技术人员修改。
- 供应商、价格、最小订购量和供货周期不属于物料基础字段,由采购人员通过物料供应商关系维护。
- 库存数量、预留数量、锁定数量、在途数量和预警阈值不属于物料基础字段,物料修改接口不得接收或更新这些字段。
- 基本计量单位已产生库存业务后不可直接修改。
- 每次修改记录修改前后值。
#### 故事 #MD-004:物料主数据作废
作为|技术人员
我想要|将不再使用的物料标记为作废而非删除
以便|保留历史数据并阻止新的普通业务
验收标准:
- 作废物料不得用于新建普通入库、出库、调拨、预留、BOM 和制造订单。
- 列表操作列保留“作废物料”或“撤销作废”按钮,以按钮文案区分当前状态;有权限的人员可直接操作,作废前必须二次确认。
- 作废不影响历史查询和合法的撤销过账(冲销)。
- 已存在账面、预留、锁定或在途库存时必须提示风险并禁止直接作废,处理完库存后方可作废。
#### 故事 #MD-005:物料作废后查询
作为|仓库管理员、采购人员或技术人员
我想要|查询已作废物料及其历史业务
以便|完成历史追溯
#### 故事 #MD-006:物料关联供应商
作为|采购人员
我想要|为物料关联多个供应商,并维护价格、币种、最小订购量、交期和首选标记
以便|采购时选择合适的供应商
验收标准:
- 供应商关系按经营组织维护。
- 物料与供应商为多对多关系,必须通过独立的 material_suppliers 关系表维护,不在物料表中保存单一供应商字段。
- 物料详情页提供供应商关系的新增、编辑、停用和查看功能。
- 供应商详情页同步展示该供应商当前关联的物料清单。
- 新业务只能选择 active 状态供应商。
- 同一物料最多设置一个当前首选供应商。
- 价格必须包含币种、生效日期和失效日期。
#### 故事 #MD-007:物料分类、物料类型、计量单位及单位换算
作为|超级管理员或技术人员
我想要|维护物料分类、物料类型、计量单位和换算关系
以便|统一物料口径并支持采购、库存和制造使用不同业务单位
验收标准:
- 物料类型至少包括原材料、半成品、成品和辅料,并允许停用。
- 分类支持树形层级,停用父分类前必须处理启用中的子分类。
- 每个物料必须设置一个基本计量单位。
- 可为物料设置多个业务单位及其与基本单位的换算比例。
- 换算比例必须大于零,并支持有效期。
- 已产生业务记录的单位和历史换算关系不得物理删除。
- 库存流水始终记录原业务数量、原单位、基本单位数量和所用换算比例。
#### 故事 #MD-008:物料主数据变更审计与重复物料检查
作为|技术人员
我想要|创建物料时检查疑似重复项,并查询物料完整变更历史
以便|减少重复建档并追溯主数据变化
验收标准:
- 重复检查至少比较当前组织内的名称、规格、品牌或制造商型号。
- 完全相同的物料编码必须阻止创建;疑似重复物料提示候选记录并要求用户确认。
- 用户确认继续创建时必须填写原因。
- 审计记录包含字段级修改前值、修改后值、操作者和时间。
- 审计记录只读,不允许普通业务用户删除。
---
### 5.4 业务伙伴管理
#### 故事 #COM-001:经营组织与业务伙伴分表建模
作为|超级管理员
我想要|将本方经营组织与外部业务伙伴分开保存,并通过组织—伙伴关系设置供应商和客户角色
以便|明确本方与外部主体的边界,同时支持同一伙伴在不同组织下具有不同业务身份
验收标准:
- 数据库分别使用 `organizations` 保存本方经营组织、`business_partners` 保存外部伙伴基础资料,不共用主表或主键空间。
- 使用 `organization_partners` 保存组织与伙伴的关系,并建立 `UNIQUE(organization_id, business_partner_id)` 约束。
- 业务伙伴基础资料至少包括法定名称、统一社会信用代码、联系人、联系方式和地址;不直接保存 organization_id、供应商状态或客户状态。
- 供应商/客户角色、组织内伙伴编码、合作状态、结算币种、付款条件等组织级属性保存在组织—伙伴关系或其扩展表中。
- 同一业务伙伴在同一经营组织下可以同时拥有供应商和客户角色;在不同经营组织下的角色和合作状态可以不同。
- 通过统一社会信用代码识别到已有伙伴时,复用伙伴基础记录并只新增当前组织关系,不重复创建外部公司主体。
- 普通用户只能读取当前组织的伙伴关系及业务属性;不得因为伙伴基础记录被多个组织复用而看到其他组织的合作信息。
#### 故事 #COM-002:业务伙伴角色管理
作为|采购人员或销售人员
我想要|设置业务伙伴的供应商或客户角色
以便|区分不同业务身份
验收标准:
- 角色设置作用于当前经营组织的 `organization_partners` 关系,不修改其他组织中的伙伴角色。
- 同一组织—伙伴关系可以同时具有供应商和客户角色。
- 移除某一角色不删除伙伴基础资料,也不影响另一角色及历史业务。
#### 故事 #COM-003:供应商合作状态管理
作为|采购人员
我想要|按经营组织设置供应商合作状态
以便|新业务只选择当前可合作的供应商
#### 故事 #COM-004:新建业务伙伴
作为|采购人员或销售人员
我想要|添加业务伙伴基础资料并建立当前组织的合作关系
以便|扩充供应商和客户库
验收标准:
- 创建流程先按统一社会信用代码检查业务伙伴基础记录,再建立当前经营组织的伙伴关系。
- 已存在伙伴基础记录但当前组织尚未关联时,不重复创建伙伴,只新增组织关系及当前组织业务属性。
- 新建和关联操作均写入审计日志,并明确记录当前经营组织。
#### 故事 #COM-005:查询业务伙伴列表
作为|采购人员或销售人员
我想要|通过业务伙伴列表和详情页查询、筛选并维护当前组织的供应商或客户
以便|选择合作伙伴并查看其基础信息及关联物料
验收标准:
- 采购人员进入“供应商管理”后,可以查看当前经营组织的供应商列表。
- 列表支持按名称模糊搜索,并按 potential、pending、active、suspended、eliminated 状态筛选。
- 采购人员可以新增供应商;列表中的“删除”操作实际执行淘汰或停用,不物理删除已被业务引用的供应商。
- 点击供应商进入详情页,展示名称、联系人、联系方式、地址、合作状态等基础信息。
- 供应商详情页下方展示该供应商供应的物料清单,包括物料编码、名称、规格、价格、币种、最小订购量和供货周期。
- 采购人员可以从供应商详情页维护物料关联,也可以从物料详情页维护多个供应商,两个入口操作同一关系表。
- 销售人员进入同一业务伙伴模块时,只显示客户相关字段和客户记录。
- 前端分别提供“供应商”和“客户”入口,两者使用同一业务伙伴基础数据及组织—伙伴关系;一个伙伴同时具备两种角色时可分别出现在两个列表中。
---
### 5.5 仓库管理
#### 故事 #WH-001:仓库管理
作为|超级管理员
我想要|管理经营组织下的仓库
以便|支持多组织、多仓库场景
验收标准:
- 仓库编码在经营组织内唯一。
- 已被业务引用的仓库只能停用,不能物理删除。
- 存在任何库存或在途调拨时不得停用。
- 仓库维护入口位于“库存查询”页面的“仓库设置”中,不单独占用侧边栏菜单。
#### 故事 #WH-002:库位管理
作为|仓库管理员
我想要|管理仓库下的库位
以便|精确定位物料存放位置
验收标准:
- 库位编码在仓库内唯一。
- 已被业务引用的库位只能停用,不能物理删除。
- 存在任何库存或在途调拨时不得停用。
- 库位与所属仓库在同一“仓库设置”入口中维护,并受当前组织和仓库权限限制。
#### 故事 #WH-003:库存预警查询
作为|仓库管理员或采购人员
我想要|查看当前组织中可用库存低于预警值的物料
以便|及时安排补充库存
验收标准:
- 库存预警作为“库存查询”页面内的标签页展示,不设置独立侧边栏菜单。
- 预警阈值在库存查询页面维护,不出现在物料主数据列表、详情或编辑表单中。
- 预警规则按“经营组织 + 仓库 + 物料”保存和计算。
- 预警阈值可以按物料和仓库配置。
- 预警以可用库存而非账面库存判断。
- 查询支持组织、仓库、分类、物料类型和处理状态筛选。
#### 当前实现记录(2026-09-23)
- “库存管理”菜单下保持“库存查询”“入库管理”“出库管理”三个入口。
- 仓库和库位基础数据已可在“库存查询 → 仓库设置”中维护,但多仓库和多库位业务流程尚未完全实现。
- 系统目前仍主要使用默认仓库 `DEFAULT` 和主库位 `MAIN` 处理入库、出库及库存相关数据。
- 待实现:在“库存查询”页面的“仓库设置”旁增加“切换仓库”入口,将所选仓库作为全局当前仓库,并统一应用到库存查询、库存预警、库存流水、入库管理和出库管理。
- 待进一步设计:多库位场景下入库、出库的库位选择规则,以及库存查询按库位筛选和展示的交互。
---
### 5.6 库存变动管理
#### 5.6.1 通用规则
- 所有库存业务单据必须包含经营组织、单据编号、业务类型、状态、经办人、发生时间和明细。
- 每条明细必须指定仓库、库位、物料、业务数量、业务单位和换算后的基本单位数量。
- 普通单据遵循 draft、submitted、posted、reversed、cancelled 状态机。
- 只有 posted 状态影响库存;已过账单据禁止修改或删除。
- 库存余额与库存流水必须在同一数据库事务中更新。
- 出库、预留和调拨发出必须校验可用库存,默认禁止负库存。
#### 故事 #STOCK-001:库存变动(入库)
作为|仓库管理员
我想要|创建入库单,选择入库类型、仓库、库位并填写原因或备注
以便|通过受控过账更新库存
入库类型:
- 采购入库:供应商送货。
- 生产入库:制造完成的成品入库。
- 退货入库:客户退货。
- 盘盈入库:经盘点确认后增加库存。
- 调拨入库:由调拨单接收产生,不允许手工独立创建。
验收标准:
- 草稿和已提交单据不改变库存。
- 过账后增加指定库存维度的账面库存并生成库存流水。
- 作废物料、停用仓库和停用库位不得执行普通入库。
- 同一幂等键重复提交不重复增加库存。
#### 故事 #STOCK-002:库存变动(出库)
作为|仓库管理员
我想要|创建出库单,选择出库类型、仓库、库位并填写原因或备注
以便|追踪物料流向并通过受控过账扣减库存
出库类型:
- 销售出库:交付给客户。
- 领料出库:生产领用。
- 退货出库:退给供应商。
- 盘亏出库:经盘点确认后减少库存。
- 调拨出库:由调拨单发出产生,不允许手工独立创建。
验收标准:
- 草稿和已提交单据不改变库存。
- 过账时重新校验可用库存,不足时整单失败且不产生部分流水。
- 过账后减少账面库存并生成库存流水。
- 两个并发请求不能共同扣减同一份可用库存。
- 同一幂等键重复提交不重复扣减库存。
#### 故事 #STOCK-003:仓库库存查询(通用)
作为|仓库管理员、采购人员或技术人员
我想要|按组织、仓库、库位、物料查看实时库存
以便|了解库存情况并决定是否采购或生产
验收标准:
- 同时展示账面、预留、锁定、可用和在途数量。
- 支持按物料编码、名称、分类、类型、仓库和库位筛选。
- 查询结果只包含用户有权访问的组织和仓库。
- “库存查询”是库存管理的统一工作台,页面内包含“库存余额”“库存预警”“库存流水”三个标签,不再另设“库存管理”子页面。
- 页面提供“仓库设置”入口,用于维护有权限仓库及其库位。
#### 故事 #STOCK-004:成品库存查询(销售专用)
作为|销售人员
我想要|查看有权访问组织的成品可用库存
以便|回答客户咨询并确认当前可交付数量
验收标准:
- 只显示物料类型为成品的记录。
- 默认展示可用库存,不能把预留、锁定或在途库存计入可交付量。
- 销售人员无权执行库存变动。
#### 故事 #STOCK-005:仓库间调拨
作为|仓库管理员
我想要|使用一张调拨单将物料从来源仓库或库位转移到目标仓库或库位
以便|保证调出、在途和收货全过程可追溯
调拨状态:
| 状态 | 说明 |
| ---------- | ----------------- |
| draft | 草稿,不影响库存 |
| submitted | 已提交,等待发出 |
| in_transit | 已发出,来源库存减少,在途库存增加 |
| received | 已收货,在途库存减少,目标库存增加 |
| cancelled | 发出前取消 |
| reversed | 已完成调拨被撤销过账(冲销) |
验收标准:
- 来源与目标不得是相同的仓库和库位组合。
- 发出时校验来源可用库存;库存不足时整单失败。
- 发出和接收分别产生关联到同一调拨单的库存流水。
- 已发出调拨不能直接取消;必须收货或按异常退回流程处理。
- 接收数量默认等于发出数量;如允许差异,必须记录差异原因并经过授权确认。
- 重复发出或重复接收不得重复改变库存。
#### 故事 #STOCK-006:库存单据撤销过账(冲销)
作为|具有撤销过账(冲销)权限的仓库管理员
我想要|对错误的已过账库存单据执行完整的撤销过账(冲销)
以便|在不篡改历史记录的情况下恢复库存
验收标准:
- 只有 posted 状态且未执行过撤销过账(冲销)的单据可以发起该操作。
- 用户必须填写撤销过账(冲销)原因。
- 撤销过账(冲销)生成独立的撤销过账记录和数量相反的库存流水。
- 原单据、撤销过账记录及其流水可以双向追溯。
- 执行撤销过账(冲销)前,必须校验反向操作是否会造成负库存或破坏后续业务约束。
- 撤销过账记录自身不得再次执行撤销过账(冲销);需要纠正时创建新的合法业务单据。
- 撤销过账(冲销)动作写入审计日志。
#### 故事 #STOCK-007:库存盘点、差异确认与盘盈盘亏过账
作为|仓库管理员
我想要|创建盘点任务、录入实盘数量并确认差异
以便|修正账实差异并保留盘点依据
盘点状态:
| 状态 | 说明 |
| -------------------- | ------------ |
| draft | 草稿,正在选择盘点范围 |
| counting | 盘点中,已保存账面快照 |
| pending_confirmation | 已完成录入,等待差异确认 |
| posted | 差异已过账 |
| cancelled | 盘点取消 |
验收标准:
- 开始盘点时保存盘点范围内的账面库存快照。
- 可按仓库、库位、物料分类或指定物料创建盘点范围。
- 盘点期间对应库存默认锁定,禁止普通出入库和调拨。
- 系统自动计算实盘数量与快照数量的差异。
- 差异确认必须记录原因和确认人。
- 过账时自动生成盘盈或盘亏调整单及库存流水。
- 无差异盘点也必须保留盘点结果。
#### 故事 #STOCK-008:库存预留、释放及可用量查询
作为|生产人员或其他有权业务人员
我想要|为明确的业务需求预留库存,并在取消或完成需求时释放预留
以便|避免同一库存被多个需求重复占用
验收标准:
- 预留必须关联来源业务类型和来源业务编号。
- 预留数量不得超过当前可用库存。
- 创建预留后账面库存不变,预留库存增加,可用库存减少。
- 出库过账时消耗对应预留;需求取消或关闭时释放剩余预留。
- 重复预留、释放或消耗操作必须幂等。
- 支持按来源业务、仓库、库位和物料查询预留明细。
#### 故事 #STOCK-009:库存流水和单据追溯
作为|仓库管理员、采购人员或审计人员
我想要|从物料、库存流水或业务单据任一入口追溯完整库存变化
以便|快速定位库存来源、去向和责任人
验收标准:
- 每条流水包含组织、仓库、库位、物料、变动前数量、变动数量、变动后数量、单位、业务类型、关联单据、操作者和时间。
- 流水一经生成不得修改或删除。
- 支持按时间、物料、仓库、库位、业务类型、单据编号和操作者筛选。
- 单据可以查看对应流水,流水可以打开来源单据。
- 查询及导出遵守组织和数据权限。
---
### 5.7 BOM 与制造过程
#### 故事 #BOM-001:BOM 表维护
作为|技术人员
我想要|为成品或半成品维护 BOM 清单
以便|明确产品组成并支持物料需求分析
验收标准:
- BOM 必须属于当前经营组织。
- BOM 明细包含子物料、单位用量、计量单位和可选损耗率。
- 已生效版本不得直接修改,只能创建新版本。
#### 故事 #BOM-002:BOM CSV 批量导入
作为|技术人员
我想要|通过 CSV 模板按层级批量导入 BOM
以便|快速维护复杂产品结构
验收标准:
- 导入遵守统一批量导入规范。
- CSV 模板至少包含根物料编码、BOM 版本、层级、物料编码、数量和计量单位。
- 每个 BOM 分组必须从 0 层开始,0 层代表顶层物料;后续行按深度优先顺序描述其子项。
- 相邻两行向下展开时层级最多增加 1;禁止从 1 层直接跳到 3 层。
- 层级降低时可以回到任意已有上级;非 0 层物料必须能找到最近的上一层父项。
- 系统按当前经营组织对物料编码执行完全匹配;匹配成功自动关联物料,未匹配、多重匹配或物料已作废时阻止导入。
- 导入前校验单位、数量、重复子项、自引用和任意深度循环依赖,例如 A→B→C→A。
- 环检测必须同时考虑本次 CSV 内容和系统中已有的 BOM 关系。
- 错误报告必须包含 CSV 行号、物料编码、错误类型和可操作的修改说明。
- 导入默认生成草稿版本,不直接生效。
#### 故事 #BOM-003:制造订单发起
作为|生产人员
我想要|选择成品、BOM 版本、计划数量和目标仓库发起制造订单
以便|启动生产流程
验收标准:
- 订单创建时锁定所用 BOM 版本,后续 BOM 变更不影响该订单。
- 系统按计划数量展开需求并显示库存可用量和短缺量。
- 作废物料、停用 BOM 版本不得用于新制造订单。
#### 故事 #BOM-004:制造订单执行
作为|仓库管理员
我想要|根据制造订单执行领料和成品入库
以便|准确记录生产投入与产出
验收标准:
- 每次领料和完工均生成独立且可追溯的库存业务单据。
- 领料不得超过需求上限,超领必须具有专门权限并填写原因。
- 成品入库数量不得超过订单允许数量。
- 单次操作中的单据、库存流水和余额更新必须保持事务一致。
#### 故事 #BOM-005:制造订单跟踪
作为|生产人员
我想要|查看制造订单的计划、已领料、已完工、剩余和短缺情况
以便|跟踪生产进度
#### 故事 #BOM-006:BOM 递归查询
作为|技术人员、生产人员或采购人员
我想要|按指定成品、BOM 版本和计划数量递归展开所有层级物料
以便|分析库存能否满足生产需求
验收标准:
- 按每层用量、单位换算和损耗率计算汇总需求。
- 展示账面、预留、可用和短缺数量。
- 检测到循环引用时停止展开并显示完整问题路径。
#### 故事 #BOM-007:物料替代料管理
作为|技术人员
我想要|为物料设置替代物料、替代比例、优先级和有效期
以便|缺料时按受控规则选择替代方案
验收标准:
- 替代关系必须属于同一经营组织。
- 替代物料必须处于有效状态且具有兼容计量单位。
- 实际使用替代料时记录原物料、替代物料、数量和操作者。
#### 故事 #BOM-008:BOM 版本、生效日期、审批和停用
作为|技术人员
我想要|为 BOM 建立版本并控制审批、生效和停用
以便|保证生产始终使用经过批准且在有效期内的产品结构
BOM 版本状态:
| 状态 | 说明 |
| ---------------- | ------------- |
| draft | 草稿,可编辑 |
| pending_approval | 待审批,不可随意修改 |
| effective | 已生效,可用于新制造订单 |
| obsolete | 已停用,仅供历史查询 |
| rejected | 审批驳回,可修改后重新提交 |
验收标准:
- 同一父项物料可以存在多个版本,但同一时点只能有一个默认有效版本。
- 版本号在同一父项物料内唯一。
- 生效日期不得晚于失效日期。
- 只有审批通过的版本可以生效。
- 已生效版本不可直接修改;变更时复制生成新草稿版本。
- 停用不影响已经锁定该版本的制造订单和历史查询。
- 审批、生效和停用操作写入审计日志。
#### 故事 #BOM-009:BOM 环路、自引用和重复子项校验
作为|技术人员
我想要|系统在保存、导入和生效 BOM 时自动检查结构合法性
以便|防止无法展开或重复计算的错误 BOM
验收标准:
- 父项物料不得直接作为自己的子项。
- 系统必须检测任意深度的循环引用,并显示完整循环路径。
- 层级导入必须从 0 层开始,相邻行向下展开时不得跨级。
- 同一 BOM 版本中相同子物料和相同替代组不得重复出现;如业务允许分行,必须明确工序或用途维度。
- 子项数量和换算比例必须大于零。
- 草稿可以保存非阻断性提示,但存在自引用、循环引用或无效数量时禁止提交审批及生效。
- CSV 导入执行相同校验规则并返回具体行号。
#### 故事 #BOM-010:制造订单部分领料、部分完工及关闭
作为|生产人员或仓库管理员
我想要|对制造订单分批领料、分批完工,并在结束时关闭订单
以便|支持真实生产过程中的多次执行
制造订单状态:
| 状态 | 说明 |
| ----------- | ------------- |
| draft | 草稿 |
| released | 已下达,可预留和领料 |
| in_progress | 已发生领料或完工 |
| completed | 计划数量已完工 |
| closed | 已人工关闭,不再允许新业务 |
| cancelled | 未发生库存业务前取消 |
验收标准:
- 每次领料不得超过剩余需求与权限允许的超领上限。
- 每次完工不得超过剩余可完工数量。
- 系统累计展示计划、已领、已退、已完工和剩余数量。
- 关闭前提示未领料、未消耗预留和未完工数量。
- 关闭时自动释放剩余预留,不自动伪造成品入库。
- 已发生库存业务的订单不能取消,只能完成或关闭;错误库存业务按撤销过账(冲销)流程处理。
---
### 5.8 批量操作
#### 5.8.1 CSV/Excel 导入通用规范
- 主数据导入支持 CSV 或 Excel;BOM 层级导入统一使用 CSV。
- 模板必须包含模板类型和版本号,系统拒绝不支持的版本。
- 正式导入前提供预校验,不通过时不写入业务数据。
- 错误报告包含工作表、Excel 行号、字段名、原始值和错误原因。
- 默认采用整批事务:任意一行失败,则整批不落库。
- 每次导入生成唯一任务编号,重复提交同一任务不得重复写入。
- 大文件使用后台任务处理,并显示等待、处理中、成功、失败状态及进度。
- 系统限制文件格式、大小、行数和单元格内容。
- 导入、下载错误报告和正式确认均遵守组织及数据权限。
- 导出内容必须防止 Excel 公式注入。
#### 故事 #BAT-001:CSV/Excel 批量导入物料
作为|技术人员
我想要|通过 CSV 或 Excel 模板批量导入物料主数据
以便|快速初始化大量物料数据
验收标准:
- 校验必填字段、物料编码唯一性、疑似重复物料、物料分类、类型、单位和换算关系。
- 物料编码必须在当前经营组织内完全匹配或保持唯一,不得跨经营组织关联数据。
- 错误报告定位到具体文件行及字段。
- 预校验通过后由用户确认正式导入。
- 正式导入成功后为每条物料生成审计记录。
#### 故事 #BAT-002:Excel 批量入库
作为|仓库管理员
我想要|通过 Excel 模板批量生成入库单草稿
以便|快速处理大量物料入库
验收标准:
- 导入只生成草稿单,不直接改变库存。
- 用户检查并提交后,由有权限人员执行过账。
- 正式过账遵守库存单据幂等和事务规则。
#### 故事 #BAT-003:批量勾选入库
作为|仓库管理员
我想要|勾选多个待处理明细批量生成或过账入库单
以便|提高高频操作效率
验收标准:
- 批量操作前展示影响范围和汇总数量。
- 任一明细校验失败时默认整批失败并显示原因。
- 重复点击不得重复入库。
#### 故事 #BAT-004:CSV/Excel 导出物料列表
作为|采购人员、销售人员或技术人员
我想要|将权限范围内的物料列表导出为 CSV 或 Excel
以便|离线查看或做其他处理
验收标准:
- 导出范围与当前筛选条件一致。
- 导出包含物料编码、名称、规格、类型、大类、小类、单位和状态;采购人员可额外导出其有权查看的供应商采购属性。
- 导出字段按角色权限脱敏或隐藏。
- 文件内容进行公式注入防护。
- 导出操作写入审计日志。
---
### 5.9 权限与认证
权限模型采用“用户多角色 + 功能权限 + 用户数据范围”的结构:
- 角色:用户职责集合,例如仓库管理员、采购人员;一个用户可以同时拥有多个角色。
- 功能权限:每个角色可以对资源执行查看、新建、修改、提交、过账、撤销过账(冲销)、审批和导出等动作。
- 用户数据范围:独立配置用户可访问的经营组织及仓库,不因拥有某个角色而自动扩大。
通用规则:
- 超级管理员是最高权限角色,默认拥有全部功能权限和全部经营组织、仓库的数据权限,不受普通用户数据范围限制。
- 系统必须至少保留一个启用状态的超级管理员;最后一个超级管理员不得被停用、删除或移除该角色。
- 用户可以拥有多个启用状态的角色,不需要在角色之间手工切换。
- 有效功能权限取该用户所有启用角色功能权限的并集。
- 最终访问必须同时满足“拥有对应功能权限”和“目标数据属于用户授权范围”。
- 本版本不设置角色间的显式拒绝冲突;未被任一角色授予的权限默认拒绝。
- 服务端必须执行权限校验,前端菜单或按钮隐藏不能替代服务端校验。
- 未明确授予的权限默认拒绝。
- 高风险权限包括库存过账、撤销过账(冲销)、盘点确认、BOM 审批和用户授权,应单独配置。
#### 故事 #AUTH-001:用户登录
作为|系统用户
我想要|使用用户名和密码登录系统
以便|访问被授权的系统功能
验收标准:
- 密码采用安全哈希存储,不得明文保存或记录到日志。
- 连续失败达到阈值后执行临时锁定或限流。
- 登录成功返回用户角色、默认组织和可访问组织。
- 停用用户立即禁止新登录。
#### 故事 #AUTH-002:单点登录(SSO)
作为|超级管理员
我想要|配置统一身份认证并将外部账号绑定到本地用户
以便|用户一次登录即可访问系统
验收标准:
- 明确身份提供方、回调地址和账号唯一标识。
- 外部账号必须映射到本地用户、角色及组织数据范围。
- 未完成映射或本地用户已停用时拒绝登录。
- 是否保留本地密码登录由系统配置决定。
#### 故事 #AUTH-003:JWT 令牌验证
作为|系统
我想要|通过访问令牌和刷新机制验证用户身份
以便|实现安全的无状态接口认证
验收标准:
- 令牌包含用户标识、有效期和唯一令牌标识,不直接授信客户端传入的组织权限。
- 服务端每次操作重新校验用户状态、当前组织和关键权限。
- 支持访问令牌过期、刷新、主动注销和令牌撤销。
- 密钥轮换后能够在过渡期安全验证合法令牌。
#### 故事 #AUTH-004:基于角色的权限控制
作为|超级管理员
我想要|为角色配置资源、动作和数据范围权限
以便|保证数据安全和职责分离
验收标准:
- 权限粒度至少覆盖查看、新建、修改、提交、过账、撤销过账(冲销)、审批和导出。
- 关键接口必须具有自动化越权测试。
- 无权限请求返回统一错误且不泄露目标数据是否存在。
#### 故事 #AUTH-005:用户角色和数据范围分配
作为|超级管理员
我想要|为用户分配一个或多个角色,以及可访问组织和仓库
以便|控制用户的功能权限和数据范围
验收标准:
- 用户与角色为多对多关系,同一用户可以同时分配多个角色。
- “用户管理”页面负责用户账号、所属组织、默认组织、角色及可访问仓库范围;“角色与权限”页面负责角色及其功能权限,不把两类配置混在经营组织表单中。
- 同一角色不得重复分配给同一用户,已停用角色不计入有效权限。
- 用户不需要选择当前角色,系统自动合并其所有启用角色的功能权限。
- 例如用户同时拥有“采购人员”和“仓库管理员”角色时,可以同时使用采购和仓库功能。
- 用户至少拥有一个可访问组织才可以进入业务模块。
- 默认组织必须属于可访问组织集合。
- 新增、移除或停用角色后,用户的下一次请求立即按最新角色重新计算权限。
- 移除组织或仓库权限后,用户后续请求立即不能访问对应数据。
- 角色及数据范围变更写入审计日志。
- 最后一个启用状态的超级管理员不得被停用、删除或移除超级管理员角色。
#### 故事 #AUTH-006:菜单与按钮动态显示
作为|系统用户
我想要|登录后只看到有权使用的菜单和操作按钮
以便|界面简洁且避免误操作
验收标准:
- 菜单和按钮根据功能权限动态生成。
- 登录后的业务菜单采用以下固定信息架构:
- “物料主数据”下包含“物料”和“基础配置”;“基础配置”页面以“物料分类”“计量单位”“编码规则”三个标签组织功能。
- “公司组织”位于“物料主数据”和“业务伙伴”之间,下包含“组织管理”“用户管理”和“角色与权限”。
- “业务伙伴”下包含“供应商”和“客户”,前端入口分开但底层复用业务伙伴及组织—伙伴关系。
- “库存管理”下包含“库存查询”“入库管理”和“出库管理”;库存余额、预警、流水及仓库设置集中在“库存查询”页面。
- 现有“物料申请”“申请审批”“日志记录”继续作为独立菜单保留原有名称、顺序、路由和权限逻辑,不纳入本轮菜单重组,也不改变其现有业务能力。
- 物料主数据页面不得出现库存数量、库存状态或预警阈值;库存管理页面不得提供修改物料编码、分类或基本单位的入口。
- 切换经营组织后重新计算可用功能和仓库范围。
- 手工构造请求仍必须经过服务端权限校验。
---
### 5.10 全局审计
#### 故事 #AUD-001:全局操作审计日志
作为|超级管理员或审计人员
我想要|查询系统关键业务和安全操作的审计日志
以便|追溯谁在何时对什么数据执行了什么操作
审计范围至少包括:
- 登录成功、登录失败、注销和令牌撤销。
- 用户、角色、功能权限、组织权限和仓库权限变更。
- 物料、业务伙伴、仓库、库位、编码规则和 BOM 变更。
- 单据提交、过账、取消、撤销过账(冲销)、审批和关闭。
- 批量导入、导出及错误报告下载。
验收标准:
- 日志包含组织、用户、角色、操作时间、对象类型、对象编号、动作、结果、修改前后值、请求标识、来源 IP 或终端信息。
- 敏感字段如密码、令牌和密钥不得写入日志。
- 审计日志只追加、不可由普通用户修改或删除。
- 支持按时间、组织、用户、对象、动作和结果筛选。
- 审计日志查看与导出本身也必须被审计。
- 日志保留周期可配置,达到保留期限后的归档或清理必须由受控任务执行。
---
### 5.11 库存预警通知
#### 故事 #NOTIFY-001:库存预警通知及处理状态
作为|仓库管理员或采购人员
我想要|在可用库存低于预警阈值时收到通知,并记录处理过程
以便|形成从发现风险到完成处理的闭环
预警状态:
| 状态 | 说明 |
| ------------ | ------------ |
| open | 新产生,尚未处理 |
| acknowledged | 已确认并指定处理人 |
| resolved | 库存恢复或确认无需处理 |
| ignored | 经授权忽略,必须填写原因 |
验收标准:
- 预警按“经营组织 + 仓库 + 物料”计算,并使用可用库存判断。
- 同一对象存在未关闭预警时不得重复创建相同预警。
- 库存恢复到阈值以上时可以自动解决,也允许人工确认解决。
- 确认、解决和忽略均记录操作者、时间和原因。
- 通知只发送给有权访问对应组织和仓库的用户。
- 支持站内通知;邮件、短信或企业消息渠道作为可选扩展。
- 预警查询支持状态、组织、仓库、物料分类、处理人和时间筛选。
---
## 六、统一非功能要求
### 6.1 一致性与并发
- 库存单据、流水和余额更新必须具备数据库事务一致性。
- 编码生成、库存扣减、预留、调拨发出、调拨接收、过账和撤销过账(冲销)必须支持并发控制。
- 所有可能被重复提交的写操作必须支持幂等。
- 并发修改主数据和单据时使用版本号或等效机制检测覆盖冲突。
### 6.2 查询与导出
- 列表查询统一支持分页、筛选、排序和明确的最大分页大小。
- 查询和导出始终应用相同的组织、仓库和字段权限。
- 大数据量导出使用后台任务,并提供任务状态和有效期受控的下载方式。
### 6.3 安全与隐私
- 所有接口使用加密传输。
- 密码、令牌、密钥和个人敏感信息不得输出到普通日志。
- 文件上传必须校验扩展名、实际内容类型、大小和恶意内容。
- 所有服务端查询均强制带入当前经营组织权限条件。
### 6.4 可观测性与恢复
- 关键请求记录请求标识,以便关联应用日志、审计日志和库存单据。
- 对过账失败、库存异常、导入失败和通知失败提供可监控指标。
- 明确数据库备份频率、恢复目标和恢复演练机制。
---
## 七、用户故事完成标准
每条用户故事进入开发前必须补齐:
- 前置条件和角色权限。
- 正常流程及状态变化。
- 字段级校验规则。
- 异常、重复提交和并发处理。
- 对库存、审计和通知的影响。
- 数据范围和越权场景。
- 可执行的 Given/When/Then 验收用例。
实现完成需满足:
- 正常、异常、并发和越权测试通过。
- 数据库约束与服务端校验共同保证核心不变量。
- API、数据字典、状态机和用户操作说明同步更新。
- 不以菜单隐藏、前端校验或人工约定替代服务端业务约束。
### 7.1 武汉真实数据验证
- 主数据管理和 BOM 管理上线前,必须使用武汉真实数据库的只读副本完成验证,不直接连接或修改生产数据库。
- 导入验证前记录武汉数据中的物料、分类、单位、供应商、物料供应商关系和 BOM 数量基线。
- 测试数据必须按公司要求完成脱敏,并统一归属“武汉”经营组织,禁止混入北京或其他组织。
- 主数据验证至少覆盖单条新增、修改、详情页作废、分类筛选、模糊搜索、CSV/Excel 批量导入和导出。
- 供应商验证至少覆盖供应商列表筛选、详情信息、状态变更,以及供应商与物料双向多对多查询和维护。
- BOM 验证至少覆盖 0 层顶层结构、正常多层导入、层级跳跃、物料未匹配、重复子项、自引用和 A→B→C→A 环路。
- 导入失败必须输出具体文件行号和原因;修正源文件后可以重新预校验和导入。
- 验收完成后核对成功导入数量、失败数量和错误报告,确保没有跨组织数据和静默丢失。
---
## 八、建议实施顺序
1. 建立最小经营组织、用户组织权限、角色权限和审计底座。
2. 优先完成物料主数据、分类、类型、单位、编码规则及 CSV/Excel 导入导出。
3. 完成供应商列表、详情页和物料供应商多对多关系。
4. 优先完成 BOM 维护、CSV 层级导入、物料匹配、层级校验和环检测。
5. 完成仓库、库位、库存流水、入库、出库、调拨、盘点、预留和预警。
6. 完成制造订单分批执行、性能优化和外部认证。
---
## 九、功能矩阵
说明:
- ✅:该角色默认具备此功能权限。
- ❌:该角色默认不具备此功能权限,可由超级管理员根据实际职责另行授权。
- 本矩阵描述功能权限;实际访问还必须同时满足经营组织和仓库数据范围限制。
- 超级管理员拥有全部功能权限和全部经营组织、仓库的数据权限,无需额外分配业务角色。
| 功能模块 | 仓库管理员 | 采购人员 | 技术人员 | 生产人员 | 销售人员 | 超级管理员 |
| --- | :---: | :---: | :---: | :---: | :---: | :---: |
| **公共访问** | | | | | | |
| 用户登录、注销 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 查看个人角色和权限 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 查看及切换已授权经营组织 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 查看权限范围内的菜单和按钮 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **经营组织与数据范围** | | | | | | |
| 查看已授权经营组织 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 创建、启用、停用经营组织 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置用户可访问经营组织 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置用户默认经营组织 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置用户可访问仓库 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| **编码规则** | | | | | | |
| 查看编码规则 | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ |
| 配置编码规则 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 申请新物料编码 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| **物料主数据** | | | | | | |
| 查看有效物料 | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| 查看已作废物料及历史 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| 创建物料 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 修改物料基础信息 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 作废物料 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 执行重复物料检查 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 查看物料变更历史 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 维护物料分类和物料类型 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 维护计量单位和换算关系 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 维护物料供应商关系 | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| **业务伙伴** | | | | | | |
| 查看供应商 | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 查看供应商详情及关联物料 | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 新建、编辑、淘汰供应商 | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 查看客户 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| 新建和编辑客户 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| 设置业务伙伴角色 | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
| 设置供应商合作状态 | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| **仓库与库位** | | | | | | |
| 查看仓库和库位 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| 创建、修改、启用、停用仓库 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 创建、修改、启用、停用库位 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置库存预警阈值 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| **库存查询与操作** | | | | | | |
| 查看通用库存 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| 查看成品可用库存 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| 创建和修改入库单草稿 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 提交和过账入库单 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 创建和修改出库单草稿 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 提交和过账出库单 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 创建和提交仓库调拨单 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 执行调拨发出和接收 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 执行撤销过账(冲销) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 创建和执行库存盘点 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 确认盘点差异并过账 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 创建和释放生产库存预留 | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ |
| 查看库存预留明细 | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |
| 查看库存流水和关联单据 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 导出库存流水 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| **BOM 与制造** | | | | | | |
| 查看有效 BOM | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
| 创建和维护 BOM 草稿 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| CSV 批量导入 BOM | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 提交 BOM 审批 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 审批、驳回、生效和停用 BOM | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 维护物料替代关系 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 执行 BOM 结构合法性检查 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 递归展开 BOM 和查看物料短缺 | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
| 创建和下达制造订单 | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ |
| 查看和跟踪制造订单 | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ |
| 执行制造订单领料 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 执行制造订单成品入库 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 确认制造订单部分完工 | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ |
| 关闭制造订单并释放剩余预留 | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ |
| **批量导入与导出** | | | | | | |
| 下载物料导入模板 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 预校验及批量导入物料 | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 下载入库导入模板 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 批量生成入库单草稿 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 批量勾选并确认入库 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 导出物料列表 | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ |
| 查看本人发起的导入和导出任务 | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| **库存预警通知** | | | | | | |
| 查看库存预警 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 确认库存预警和指定处理人 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 解决或忽略库存预警 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 查看本人站内通知 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **用户、认证与权限** | | | | | | |
| 管理用户 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 分配用户角色 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置角色功能权限 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置用户组织和仓库数据范围 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 配置 SSO | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 撤销用户令牌和会话 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| **全局审计** | | | | | | |
| 查看全局审计日志 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 导出全局审计日志 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 查看库存过账和撤销过账审计 | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
### 9.1 权限配置补充规则
- 同一用户可以拥有多个启用角色,不需要手工切换角色;有效功能权限取所有启用角色的授权并集。
- 用户的组织和仓库数据范围独立配置,不因增加角色而自动扩大。
- 用户拥有功能权限但目标数据不在其组织或仓库授权范围内时,仍不得访问或操作。
- 角色被移除或停用后,相关权限从用户下一次请求开始失效。
- 库存过账、撤销过账(冲销)、盘点差异过账、BOM 审批和权限分配属于高风险操作,应独立授权。
- 默认由超级管理员审批 BOM;如果后续需要严格的技术审签,可新增“技术审批人”角色,避免技术人员维护后自行审批。
- 菜单和按钮根据权限动态显示,但所有权限必须由服务端再次校验。