1180 lines
58 KiB
Markdown
1180 lines
58 KiB
Markdown
# 物料管理系统(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;如果后续需要严格的技术审签,可新增“技术审批人”角色,避免技术人员维护后自行审批。
|
||
- 菜单和按钮根据权限动态显示,但所有权限必须由服务端再次校验。
|