# 商品出库 — 功能需求说明

> 本文档在《商品出库功能需求-草稿》基础上整理，并关联 **《关联需求分析.md》**、平台侧 **《订单管理功能需求》** v1.0.1、**《商品管理功能需求》** v1.3.3、**《店铺管理功能需求》** v1.3.2，以及商家侧 **《商品列表功能需求》**、《商品入库功能需求》** v1.0.1、《库存调整功能需求-草稿》、《库存查询功能需求-草稿》、《库存日志功能需求-草稿》、《全部订单功能需求》**、《售后管理功能需求》** v1.0、《商家端店铺上下文接口说明》** 做边界与流程对齐。  
> 范围：**店铺经营管理端 · 库存管理 · 商品出库** 对 **当前店铺** 下 **出库单** 的列表、检索、**手工创建出库**、**详情查看**，以及由 **订单支付成功**、**删除商品/规格** 触发的 **系统自动出库** 记录展示。  
> **说明：** 本文档 **仅描述功能需求与业务规则**；不涉及数据库结构、接口定义及技术实现细节。  
> **命名区分：** **出库** 指 **可用库存减少** 及 **出库单** 留痕；**入库、库存调整、库存查询、库存日志** 为 **并列子模块**，职责见 §1.1。

---

## 1. 模块定位

### 1.1 业务目标

在农资商城 **店铺经营管理端（Web）· 库存管理** 提供 **商品出库** 能力，使 **店铺管理员**（商户经营账号及已授权子管理员）能够：

- 浏览 **当前店铺** 全部 **出库单**（含 **系统自动出库** 与 **手工出库**）；
- 通过 **高级检索** 按单号、商品、类型、时间、经办人等 **定位** 历史出库；
- **手工创建出库单**：对 **一个或多个商品规格** 批量执行 **订单出库（线下）/ 过期出库 / 其他出库**，系统 **生成出库单号** 并 **减少可用库存**；
- **查看出库单详情**（基本信息、出库明细行）；
- 与 **全部订单** 协作：C 端买家 **支付成功** 后，系统 **自动扣减库存** 并 **生成出库单**（§5.4）；
- 与 **商品列表** 协作：商家 **删除商品/规格** 时，系统 **自动生成出库留痕**（**库存变化量为 0**，§6）。

**不包含（本期或与它模块分工）：**

| 能力 | 说明 |
|------|------|
| **商品入库** | 见 **商品入库**；含 **采购/退货入库**、**新增规格自动入库（留痕）** 等 **增库存** 场景 |
| **库存调整** | 见 **库存调整**；直接 **增/减/覆盖** 库存，变化原因记 **库存编辑** |
| **库存查询列表** | 见 **库存查询**；展示 **实时可用库存**；可从库存行 **查看出入库明细** |
| **库存日志统一列表** | 见 **库存日志**；汇总 **全部** 出入库变化；本模块 **写入** 出库类记录 |
| **发货作业** | 见 **发货管理 / 全部订单**；发货 **不重复** 扣库存（支付已成功扣减，O4） |
| **关单/取消回滚库存** | 见 **平台 · 订单管理** §10.1；已支付订单关闭时 **回滚库存**，记 **入库类** 日志，**非** 本模块 **手工出库** |
| **买家退货自动减库存** | **不适用**；退货验收后商家在 **商品入库** 做 **退货入库** |
| **平台代商家出库** | **平台管理端** **无** 本菜单 |
| **出库单编辑 / 作废 / 反审** | **本期不做**；出库单 **确认提交后不可修改** |

### 1.2 与草稿的对应关系

| 草稿条目 | 定稿处理 |
|----------|----------|
| §1 支付后自动扣减并生成出库单号 | §5 |
| §2 删除规格算作出库、变化量为 0 | §6 |
| §3 手工批量出库（线下/过期/其他） | §7～§9 |
| §4 按当前店铺查询 | §1.5、§2.5 |
| §5 店铺上下文 | §2.5、§12 |
| §6 异常返回 | **不纳入** |
| §7 技术栈 | **不纳入** |

### 1.3 在库存链中的位置

```text
【C 端】下单 → 支付成功
            ↓
【订单协作】扣减可用库存（唯一写入口，支付场景）
            ↓
【自动】生成出库单（下单扣减，仅留痕）→ 库存日志
            ↓
【商家 · 本模块】手工出库（过期/线下订单/其他）→ 生成出库单 → 可用库存减少
            ↓
【商家 · 商品列表】删除商品/规格 → 自动出库留痕（变化量 0）
            ↓
【商家 · 库存查询】展示实时库存；可查看该规格出入库明细
            ↓
【商家 · 库存日志】统一展示全部变化（含本模块与其他模块写入项）
            ↓
【并行 · 非本模块】
    采购/退货入库 → 商品入库
    库存编辑 → 库存调整
    已支付关单回滚 → 订单协作层（入库类日志）
```

| 关联模块 | 关系 | 边界说明 |
|----------|------|----------|
| **全部订单 / 发货管理** | **上游触发** | **支付成功** → **扣减库存** + **自动生成出库单（留痕）**；发货 **不再扣** |
| **商品列表** | **上游触发** | **逻辑删除** 商品/规格 → **自动出库留痕**（变化量 **0**）；**不** 再走手工出库 |
| **商品入库** | 并列 | **增库存**；退货验收后 **退货入库** **不在** 本模块 |
| **库存调整** | 并列 | **库存编辑** 不走出库单；**不替代** 过期/线下等 **业务出库** |
| **库存查询** | 下游只读 | 出库成功后 **可用库存** 即时减少；明细弹窗 **可读** 本模块出库记录 |
| **库存日志** | 下游展示 | 本模块确认出库后 **写入** 日志；原因见 §3.2 |
| **售后管理** | 协作口径 | 售后 **不自动** 改库存；退货 **加库存** 走 **商品入库** |
| **平台 · 订单管理** | 规则一致 | O4 支付扣库存；§10.1 关单回滚 **对称**；**非** 本模块操作入口 |

### 1.4 数据范围

- **纳入：** 请求上下文 **当前店铺** 下全部 **已确认** 的出库单（含 **系统自动** 与 **手工**）；
- **排除：** 其他店铺出库单；**尚未提交** 的出库草稿（若前端本地暂存，**不上屏** 至列表）；
- **上下文：** 页头展示 **当前店铺名称**（只读）；切换店铺后列表 **整页刷新**。

### 1.5 使用端与角色

| 端 | 可操作角色 | 能力 |
|----|------------|------|
| **店铺经营管理端** | **商户经营账号** | 本模块全部能力 |
| **店铺经营管理端** | 员工（子管理员） | 由 **角色管理** 决定菜单与按钮（列表/出库/详情） |
| **平台管理端** | 平台管理员 | **无** 本模块 |
| **C 端** | 买家/访客 | **不可** 访问 |

---

## 2. 关联需求分析

### 2.1 与《关联需求分析》— 供给链与用户链

| 编号 / 关联点 | 平台规则 | 本模块体现 |
|---------------|----------|------------|
| **§11 可下单四条件** | 库存 **> 0** 方可下单 | 本模块 **减少** 可用库存；扣减后库存为 0 时 **不可再下单** |
| **O-P4 / O4** | 支付成功 **扣库存** | **扣减** 在 **支付协作** 完成；本模块 **自动生成出库单留痕**（§5.4） |
| **§13 非本期** | 多 SKU 完整能力 | 按 **商品 + 规格** 管理；**首期** 可与商品列表 **单规格** 并存，规格列 **可为「—」** |
| **§9.1 经营账号** | 登录后 **切换当前店铺** | 本模块 **仅操作当前店铺** 库存 |

### 2.2 与平台《订单管理功能需求》/ 商家《全部订单功能需求》

| 项 | 定稿 |
|----|------|
| 支付成功 O4 | **扣减** 商品库存；生成 **出库** 类记录（本模块 + **库存日志**） |
| 待支付关闭 O8 | **未扣** 库存，**无** 出库单 |
| 发货 O5 / O6 | 发货、更新物流 **不重复** 扣库存 |
| 已支付关单 §10.1 | 运营关闭待发货/已发货单 → **回滚库存**（订单协作层）；记 **入库类** 日志（如「取消订单返库存」）；**非** 本模块 **手工出库** |
| 出库单与订单 | 线上下单触发的出库单 **须关联** 对应 **订单号**（详情可跳转或展示订单号） |
| 商家端 | 商家 **不执行** 平台关单；**只读** 感知订单状态；**支付扣减** 与 **自动出库** 仍按 O4 执行 |

### 2.3 与平台《商品管理功能需求》/ 商家《商品列表功能需求》

| 项 | 定稿 |
|----|------|
| 商品归属 | **仅当前店铺** 下 **未逻辑删除** 的商品/规格可被选入 **手工** 出库明细 |
| 库存字段 | 商品表单中的 **库存** 为 **可用库存**；**手工出库** 在其基础上 **减少** |
| 删除商品 | **未上架 / 审核失败 / 已下架** 可删（§12）；删除时 **自动出库留痕**（§6），**变化量 0** |
| 出售中/待审核 | **不可删除**；须先 **下架/驳回** 再删 |
| 商品状态 | **任意商品状态** 均可 **手工出库**（只要商品/规格 **存在** 且 **未删除**、**库存 > 0**） |
| 条码 | 发品可填 **商品条码**；本模块 **支持条码录入** 快速添加明细行 |

### 2.4 与商家《商品入库功能需求》v1.0.1

| 项 | 定稿 |
|----|------|
| 对称关系 | **入库增库存** ↔ **出库减库存**；**自动入库（新增规格）仅留痕** ↔ **自动出库（支付扣减）仅留痕**（§5.4） |
| 退货 | 买家退货验收 → **商品入库 · 退货入库**；**非** 本模块 |
| 单号 | 入库单号与出库单号 **独立编号**，**互不共用** |
| 库存日志 | **同一张流水**；方向 **入库 / 出库** 区分 |

### 2.5 与商家《售后管理功能需求》

| 项 | 定稿 |
|----|------|
| 售后完结 | **不自动** 改库存（ASM15） |
| 退货退款 | 商家验收后 → **商品入库 · 退货入库** |
| 仅退款 | **不** 经本模块；关单/退款/回滚见 **订单/支付** 专册 |
| 关联单据 | **本期** 出库单 **不强制** 关联售后单号 |

### 2.6 与《商家端店铺上下文接口说明》

| 项 | 定稿（功能口径） |
|----|------------------|
| 数据隔离 | 列表、出库、详情 **仅当前店铺** |
| 默认店铺 | 经营账号 **默认最早有效店铺**；员工 **绑定店铺** |
| 切换店铺 | 切换后 **整页刷新** 出库列表 |
| 跨店 | **禁止** 对其他店铺商品出库 |

### 2.7 与库存管理兄弟模块（草稿口径对齐）

| 模块 | 与本模块关系 |
|------|--------------|
| **商品入库** | 入库单 / 采购退货等 **增库存**；与出库单 **独立编号** |
| **库存调整** | **库存编辑** 不产生 **过期/线下/其他** 出库单；日志原因 **库存编辑** |
| **库存查询** | 读 **实时库存**；「查看出入库明细」**聚合** 入/出库记录 |
| **库存日志** | **全量** 变化流水；本模块写入 **出库** 类及原因（§3.2） |

---

## 3. 出库类型与库存变化

### 3.1 出库单类型

| 类型 | 适用场景 | 来源 | 手工/自动 |
|------|----------|------|-----------|
| **下单扣减** | C 端会员 **在线支付成功** 后扣减库存 | **全部订单** 支付链路 | **自动** |
| **删除产品规格** | 商家 **逻辑删除** 商品/规格 | **商品列表** 删除 | **自动** |
| **订单出库** | **线下门店销售**、**非在线支付** 等需 **手工登记** 的出货（草稿「线下订单出库」） | 本模块 **手工** | **手工** |
| **过期出库** | 商品 **过期**、**报损** 等须 **减库存** | 本模块 **手工** | **手工** |
| **其他出库** | 盘亏、赠品发出等 **无法归类** 于上述场景 | 本模块 **手工** | **手工** |

> **命名定稿：** **「下单扣减」** 与 **「订单出库」** **不可混用**——前者 **仅** 指 C 端 **在线支付成功** 的系统自动出库；后者 **仅** 指 **手工** 线下等非在线支付场景。列表、详情、检索、库存日志 **统一采用上表五类名称**。

### 3.2 变化原因（库存日志口径）

本模块及相关协作写入 **库存日志** 时，**出库类** 原因包括：

| 变化原因 | 来源 | 是否出库单 | 是否改库存 | 变化量 |
|----------|------|------------|------------|--------|
| **下单扣减库存** | **支付成功** 自动 | **是**（系统自动单） | **否**（库存已在 **支付** 扣减；出库单 **仅留痕**） | 订单明细数量 |
| **删除产品规格** | **商品列表** 删除自动 | **是**（系统自动单） | **否** | **0** |
| **订单出库** | 本模块 **手工**（线下） | **是** | **是** | 正整数 |
| **过期出库** | 本模块 **手工** | **是** | **是** | 正整数 |
| **其他出库** | 本模块 **手工** | **是** | **是** | 正整数 |
| **库存编辑** | **库存调整** 模块 | **否**（调整明细） | **是** | 视调整方式 |

**入库类（非本模块写入，供边界参考）：** 新增商品规格、采购入库、退货入库、其他入库、**取消订单返库存**（关单回滚）等。

### 3.3 库存变化规则

| 规则 | 说明 |
|------|------|
| **方向** | **手工出库** **仅减少** 对应 **商品规格** 的 **可用库存**；**自动出库（下单扣减）** **不改库存**（§5.4） |
| **数量** | 手工出库明细数量须为 **正整数**；**不得超过** 该行 **当前可用库存** |
| **删除留痕** | **删除产品规格** 出库记录 **变化量固定为 0**（草稿 §2） |
| **原子性** | 一张出库单 **要么全部成功，要么全部失败**；**不允许** 部分成功 |
| **幂等** | 同一出库单 **不可重复提交** |
| **不可撤销** | 确认后 **不可编辑、删除、反审**；纠错须走 **库存调整** 或 **商品入库** 等 **另模块** |

---

## 4. 出库单号

| 项 | 定稿 |
|----|------|
| 生成时机 | 出库单 **确认提交** 时（含 **系统自动出库**） |
| 唯一性 | **全平台唯一** |
| 展示 | 列表、详情 **均展示**；支持按单号 **检索** |
| 格式 | **系统生成**；具体编码规则 **不在本文档定义** |

---

## 5. 自动出库（下单扣减 · 支付成功）

### 5.1 触发条件

同时满足时 **自动** 生成出库单：

1. C 端会员订单 **支付成功**（O4，待支付 → 待发货）；
2. 订单 **归属当前店铺**；
3. 订单明细中存在 **至少一行** 有效商品/规格及 **购买数量 > 0**。

### 5.2 业务规则

| 项 | 定稿 |
|----|------|
| 出库类型/原因 | 出库单类型 **下单扣减**；日志原因 **下单扣减库存** |
| 单据粒度 | **一张 C 端订单** 对应 **一张** 出库单；其下 **多行明细**，**一行** 对应 **订单中的一个商品/规格** |
| 明细数量 | 每行出库数量 = 订单明细 **购买数量** |
| 经办人 | **系统** 或 **空**；列表 **可展示「系统」** |
| 关联订单 | **须记录** 订单号；详情 **可展示** 订单号供核对 |
| 备注 | **可为空** |
| 列表可见 | **在本模块列表展示**；与手工出库单 **同一列表** |
| 待支付 / 关单未支付 | **不触发** |
| 重复支付回调 | **须幂等**；**不可** 重复扣库存、**不可** 重复生成出库单 |

### 5.3 流程

```text
C 端提交订单 → 待支付
    → 支付成功（O4）
        → 订单协作：扣减各明细 **可用库存**（唯一写入口，支付场景）
        → 生成 **一张** 出库单（类型：下单扣减）
              每个订单明细占 **一行**（数量 = 购买数量）
              写入库存日志（留痕；**不再对库存做 -=**）
    → 本模块列表可查询该自动单
    → 后续发货 **不再扣库存**
```

### 5.4 库存写入口径（定稿）

| 场景 | 谁写入可用库存 | 出库单作用 |
|------|----------------|------------|
| **下单扣减**（自动出库） | **支付成功** 时 **直接扣减** | **仅留痕**：记录类型、数量、关联订单、时间；**提交后不再减少库存** |
| **手工出库**（过期/线下订单/其他） | **本模块确认提交** 时 **减少** 可用库存 | **留痕 + 改库存** |

**说明：**

- 自动出库单在 **库存日志** 中仍展示 **变化前/后库存、变化量**，数值须与 **支付前后** 的实际库存 **一致**，但 **减库存动作只发生一次**（在支付成功）。
- **禁止** 支付扣减与自动出库单 **各减一遍** 导致 **重复减库存**。

---

## 6. 自动出库（删除产品规格）

### 6.1 触发条件

1. 操作发生在 **商品列表** **删除商品**（逻辑删除）**成功**；
2. 被删对象 **属于当前店铺**；
3. 删除前商品/规格 **存在** 且 **满足可删状态**（未上架 / 审核失败 / 已下架）。

### 6.2 业务规则

| 项 | 定稿 |
|----|------|
| 出库类型/原因 | **删除产品规格** |
| 库存变化量 | **固定为 0**（草稿 §2）；日志 **变化前/后** 可展示删除前快照库存，**变化量列展示 0** |
| 是否减库存 | **否**；删除后商品 **不可再售**，库存字段 **随逻辑删除失效**，**不做 -= 运算** |
| 单据粒度 | **一个被删商品/规格** 占 **一行明细**；同次批量删除 **合并为一张出库单、多行明细** |
| 经办人 | **当前执行删除的操作人** |
| 列表可见 | **在本模块列表展示** |
| 出售中/待审核删除 | **不可删** → **不触发** 本规则 |

### 6.3 流程

```text
商品列表 → 选择可删状态商品 → 删除确认 → 逻辑删除成功
    → 若本次删除涉及 N 个商品/规格：
          生成 **一张** 出库单（类型：删除产品规格）
          每个被删对象 **一行明细**（变化量 = 0）
          写入库存日志
    → 本模块列表可查询
```

---

## 7. 出库单列表

### 7.1 列表字段

| 列名 | 说明 |
|------|------|
| **出库单号** | 系统生成的唯一单号 |
| **出库类型** | 下单扣减 / 删除产品规格 / 订单出库 / 过期出库 / 其他出库 |
| **出库时间** | 确认提交时间；格式 **yyyy-MM-dd HH:mm:ss** |
| **备注** | 手工出库时填写；系统自动单 **可为空**，展示 **—** |
| **经办人** | 提交操作人 **登录名** 或 **姓名**；系统自动单 **可展示「系统」** |
| **操作** | **详情** |

**默认排序：** 出库时间 **倒序**（最新在前）。

### 7.2 高级检索

| 条件 | 类型 | 说明 |
|------|------|------|
| **出库搜索** | 关键词 | 匹配 **出库单号**、**明细中的商品名称** 或 **关联订单号**（模糊）；**关联订单号** 对 **下单扣减** 类单据 **须可命中** |
| **出库时间** | 日期区间 | **开始日期**～**结束日期**（含边界，按 **出库时间** 过滤） |
| **出库类型** | 下拉 | 全部 / 下单扣减 / 删除产品规格 / 订单出库 / 过期出库 / 其他出库 |
| **经办人** | 下拉 | 全部 / 当前店铺下有出库记录的操作人列表（**含「系统」** 若存在系统单） |

**操作按钮：** **搜索**、**重置**。

### 7.3 列表操作

| 操作 | 说明 |
|------|------|
| **商品出库** | 打开 **手工出库** 表单（§8） |
| **详情** | 进入 **出库单详情**（§9） |

---

## 8. 手工创建出库单

### 8.1 入口与表单结构

**入口：** 列表页 **「商品出库」** 按钮 → 弹窗或独立页。

**区块一：基本信息**

| 字段 | 必填 | 说明 |
|------|------|------|
| **出库类型** | 是 | 单选：**过期出库**（默认）/ **订单出库** / **其他出库** |
| **备注** | 否 | 多行文本；**最多 200 字**；占位「请输入备注」 |

> **说明：** **下单扣减**、**删除产品规格** **不可** 在手工表单中选择，**仅** 系统自动产生。

**区块二：出库商品**

| 能力 | 说明 |
|------|------|
| **选择商品** | 打开 **商品选择器**；仅 **当前店铺**、**未删除** 且 **可用库存 > 0** 的商品及其 **规格** |
| **导入商品** | 按 **模板文件** 批量导入明细（**规格、数量** 等）；失败行 **整批提示** 或 **跳过失败行** 由实现定，**须** 在导入结果中 **明确失败原因** |
| **条码录入** | 输入框「请输入商品条码」+ **确定**（支持 **Enter**）；按条码 **匹配** 商品/规格并 **追加** 至明细 |
| **明细表格** | 已选商品列表；**至少一行** 方可提交 |

**明细行建议字段（定稿）：**

| 字段 | 说明 |
|------|------|
| 商品信息 | **主图缩略图** + **商品名称** |
| **商品规格** | 规格文案；单规格无规格名时展示 **—** |
| **当前可用库存** | 只读，便于核对 |
| **出库数量** | 必填；**正整数**；**≤ 当前可用库存** |
| **操作** | **删除** 该行 |

### 8.2 商品选择器规则

| 规则 | 说明 |
|------|------|
| 店铺范围 | **仅当前店铺** |
| 商品范围 | **未逻辑删除** 且 **可用库存 > 0** |
| 规格 | **多规格** 须 **选到规格粒度**；**统一规格** 选商品即可 |
| 重复 | **同一规格** 在一张单内 **不可重复** 多行；再次选择 **合并数量** 或 **提示已存在**（二选一，**须前后一致**） |
| 状态 | **任意商品状态** 均可选（见 §2.3） |

### 8.3 条码录入规则

| 规则 | 说明 |
|------|------|
| 匹配 | 在当前店铺商品中按 **条码** 精确匹配 |
| 未匹配 | 提示 **未找到对应商品**；**不** 静默失败 |
| 库存为 0 | 提示 **该商品无可用库存**；**不** 加入明细 |
| 匹配多个 | 若条码 **不唯一**，须 **弹出规格选择** 或 **提示** 用户改用手选 |

### 8.4 提交与取消

| 操作 | 说明 |
|------|------|
| **确认** | 校验通过后：生成 **出库单号**、**减少库存**、写入 **库存日志**、关闭表单并 **刷新列表** |
| **取消** | 放弃本次编辑；**不** 产生出库单 |

### 8.5 校验规则

| 编号 | 规则 |
|------|------|
| **OUT1** | 出库类型 **必选**（仅限手工三类） |
| **OUT2** | 明细 **至少一行** |
| **OUT3** | 每行出库数量 **≥ 1** 的 **整数** |
| **OUT4** | 每行出库数量 **≤ 当前可用库存** |
| **OUT5** | 备注 **≤ 200** 字 |
| **OUT6** | 明细商品/规格须 **属于当前店铺** 且 **未删除** |
| **OUT7** | 提交时若规格 **已被删除** 或 **库存不足**，**整单失败** 并提示 |

### 8.6 手工出库流程

```text
列表 → 商品出库
    → 选择出库类型、填写备注（可选）
    → 添加出库商品（选择 / 导入 / 条码）
    → 填写各行出库数量（不超过可用库存）
    → 确认
        → 校验 OUT1～OUT7
        → 生成出库单号；库存 -= 数量；写日志
    → 返回列表
```

---

## 9. 出库单详情

### 9.1 基本信息

| 字段 | 说明 |
|------|------|
| 出库单号 | 同列表 |
| 出库类型 | 同列表 |
| 出库时间 | 同列表 |
| 备注 | 同列表 |
| 经办人 | 同列表 |
| 关联订单号 | **下单扣减** 类型 **须展示**；其他类型 **无则展示 —** |

### 9.2 出库明细

| 列 | 说明 |
|----|------|
| 商品信息 | 主图 + 名称 |
| 商品规格 | 规格文案 |
| 出库数量 | 本行 **减少** 的数量（**删除产品规格** 类型 **展示 0**） |

**操作：** **仅查看**；**无** 编辑、删除、打印 **本期要求**（打印 **非本期**）。

---

## 10. 与库存查询 / 库存日志的协作

### 10.1 库存查询

| 项 | 定稿 |
|----|------|
| 实时库存 | **手工出库** 确认后 **可用库存** 减少；**下单扣减** 的库存变化 **已在支付成功时完成** |
| 出入库明细 | 库存查询行操作 **查看出入库明细** 时，**须包含** 本模块产生的 **出库** 记录（类型、数量、时间） |

### 10.2 库存日志

| 项 | 定稿 |
|----|------|
| 记录类型 | **出库** |
| 展示字段 | 商品名称、规格、变化前库存、变化后库存、变化量、**变化原因**、操作时间 |
| 变化原因 | 与 §3.2 一致 |
| 检索 | 日志模块 **关键词** 可搜到本模块涉及的商品 |

---

## 11. 权限与菜单

| 项 | 定稿 |
|----|------|
| 菜单路径 | **库存管理 → 商品出库** |
| 权限粒度 | **菜单可见**、**商品出库（创建）**、**详情查看** 可由 **角色管理** 分配 |
| 数据权限 | **仅当前店铺**；**无** 跨店出库 |

---

## 12. 异常与提示（功能口径）

| 场景 | 期望提示（示例） |
|------|------------------|
| 未选商品提交 | 请添加出库商品 |
| 数量为空或 ≤0 | 请输入正确的出库数量 |
| 数量超过可用库存 | 出库数量不能大于可用库存 |
| 备注超长 | 备注不能超过 200 字 |
| 商品不存在/已删除 | 商品已不存在，请移除后重试 |
| 库存为 0 | 该商品无可用库存 |
| 条码未匹配 | 未找到该条码对应的商品 |
| 非当前店铺 | 无权操作其他店铺库存 |
| 提交成功 | 出库成功（或等价文案） |

---

## 13. 店铺上下文（功能口径）

与 **《商家端店铺上下文接口说明》** 一致：

```text
登录 → GET 店铺上下文 → 默认 shopId
    → 请求头携带当前 shopId
    → 本模块列表/出库/详情均按该 shopId 过滤
经营账号切换店铺 → 更新 shopId → 本页刷新
员工账号 → 固定绑定店铺，不可切换
```

---

## 14. 非本期与待建设

| 项 | 说明 |
|----|------|
| 出库单 **编辑 / 作废 / 反审** | 确认后 **不可改** |
| 关联 **订单号强制跳转**、**售后单** | **下单扣减** **须有关联订单号**；跳转 **非本期** |
| 出库录入 **批次 / 效期 / 成本** | **非本期** |
| **导入模板** 字段扩展 | 以首期 **规格 + 数量** 为准 |
| 出库单 **打印 / 导出** | **非本期** |
| 平台端 **代出库** | **不做** |
| **部分发货拆单出库** | 订单 **整单发货**（O5）；**不支持** 按发货批次拆分出库单 |

---

## 15. 业务规则汇总

| 编号 | 规则 |
|------|------|
| **OUT-A1** | **手工出库** **只减不增** 可用库存；**自动出库（下单扣减）仅留痕** |
| **OUT-A2** | 一张出库单 **全成或全败** |
| **OUT-A3** | 出库单 **确认后不可修改** |
| **OUT-A4** | 数据范围 **仅当前店铺** |
| **OUT-A5** | **支付成功** → **一张** 自动出库单（**多行明细**）；**库存由支付扣减**，出库单 **仅留痕** |
| **OUT-A6** | **删除商品/规格** → 出库留痕，**变化量 = 0** |
| **OUT-A7** | **改库存数字**（非业务出库）→ **库存调整**，**非** 本模块 |
| **OUT-A8** | 采购/退货入库 → **商品入库** 等 **他模块** |
| **OUT-A9** | 关单回滚库存 → **订单协作** + **入库类日志**，**非** 本模块手工出库 |
| **OUT-A10** | 发货 **不重复** 扣库存 |
| **OUT-A11** | 出库记录 **同步** 至 **库存日志**；**库存查询** 可 **反查明细** |
| **OUT-A12** | 手工出库数量 **不得超过** 当前可用库存 |

---

## 16. 版本记录

| 版本 | 说明 |
|------|------|
| **v1.0** | 首版定稿：对齐草稿 §1～§5；补全列表/检索/手工出库/自动出库（支付扣减、删除留痕）/详情/兄弟模块与平台订单·商品·入库·售后边界；《商品出库功能需求-草稿》**保持不变** |
| **v1.0.1** | §3.1：**下单扣减** 与 **订单出库** 命名 **不可混用**（以需求为准）；§7.2：出库搜索关键词扩展为 **出库单号 / 商品名称 / 关联订单号** |

---

*文档版本：v1.0.1（定稿）· 关联《关联需求分析.md》、平台/商家库存管理相关需求 · 草稿《商品出库功能需求-草稿.md》保持不变。*
