# 库存调整 — 功能需求说明

> 本文档在《库存调整功能需求-草稿》基础上整理，并关联 **《关联需求分析.md》** v1.6、平台侧 **《订单管理功能需求》** v1.0.1、**《商品管理功能需求》** v1.3.3、**《店铺管理功能需求》** v1.3.2，以及商家侧 **《商品列表功能需求》**、《商品入库功能需求》** v1.0.1、《商品出库功能需求》** v1.0.1、《库存日志功能需求》** v1.0、《库存查询功能需求》** v1.0、《售后管理功能需求》** v1.0、《商家端店铺上下文接口说明》** 做边界与流程对齐。  
> 范围：**店铺经营管理端 · 库存管理 · 库存调整** 对 **当前店铺** 下 **已有商品/规格** 的 **可用库存纠错与修正**（**增量更新 / 覆盖更新**），以及 **按规格查看调整明细**；**不含** 入库单、出库单生成。  
> **说明：** 本文档 **仅描述功能需求与业务规则**；不涉及数据库结构、接口定义及技术实现细节。  
> **命名区分：** **库存调整** 指 **库存编辑** 写库存入口；变化原因在 **库存日志** 中统一记 **库存编辑**；**商品入库/出库** 为 **业务入出库** 入口；**库存查询、库存日志** 为 **只读** 并列模块。

---

## 1. 模块定位

### 1.1 业务目标

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

- 浏览 **当前店铺** 下 **未逻辑删除** 的 **商品/规格** 列表，作为调整对象；
- 通过 **关键词检索** 按 **商品名称、商品规格** 快速定位待调整行；
- 对 **单个商品/规格** 执行 **库存调整**：**增量更新**（在现有库存上 **增加或减少**）或 **覆盖更新**（将库存 **直接设为** 指定数量）；
- 每次调整 **确认** 后：**变更可用库存**、**生成调整明细**（调整类型、调整前/后数量、操作账号、创建时间）、**写入库存日志**（变化原因 **库存编辑**）；
- 对任意库存行 **查看记录**：展示 **该规格** 在 **本模块** 产生的 **全部调整明细**，支持按 **调整类型** 筛选。

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

| 能力 | 说明 |
|------|------|
| **采购/退货/其他入库** | 见 **商品入库**；须走 **入库单** 与对应业务类型 |
| **过期/线下订单/其他出库** | 见 **商品出库**；须走 **出库单** 与对应业务类型 |
| **新增规格初始库存** | 见 **商品列表** 保存 + **商品入库 · 新增商品规格** 自动留痕 |
| **支付扣减 / 删规格留痕 / 关单回滚** | 见 **订单协作、商品出库、商品列表**；**非** 本模块 |
| **全店库存流水列表** | 见 **库存日志** |
| **实时库存 + 全类型出入库明细** | 见 **库存查询** |
| **批量多规格一次调整** | **本期** 仅 **单行单次** 调整（UI 为单规格弹窗） |
| **调整明细编辑 / 撤销 / 反审** | **本期不做**；确认后 **不可修改** |
| **平台代调商家库存** | **平台管理端** **无** 本菜单 |

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

| 草稿条目 | 定稿处理 |
|----------|----------|
| §1 增加/减少/覆盖库存 + 调整明细 | §3、§5、§6、§7 |
| §3 按当前店铺查询 | §1.4、§2.9 |
| §4 店铺上下文 | §2.9、§11 |
| §5 异常返回 | **不纳入** |
| §6 技术栈 | **不纳入** |

> **说明：** 草稿「增加/减少/覆盖」在定稿中拆为：**表单调整方式**（增量/覆盖，§5）与 **明细调整类型**（增加/减少/覆盖，§3.2），与 UI 一致。

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

```text
【业务入出库 · 并列】
    商品入库 · 手工/自动留痕     → 增库存（或仅留痕）→ 入库单
    商品出库 · 手工/支付/删规格   → 减库存（或仅留痕）→ 出库单
            ↓
【本模块 · 库存编辑】
    库存调整 · 确认               → 改可用库存 → 调整明细 + 库存日志（库存编辑）
            ↓
【下游只读 · 并列】
    库存查询 · 实时库存 + 单规格全流水明细
    库存日志 · 全店时间序流水
```

| 关联模块 | 关系 | 边界说明 |
|----------|------|----------|
| **商品列表** | **协作入口** | **新增规格** 初始库存 → **商品保存** + **自动入库留痕**；**编辑已有规格改库存** → **须走本模块**，**不走** 手工入库 |
| **商品入库** | 并列 | **采购/退货/其他** 业务入库 **不产生** 本模块明细；**库存编辑** **不产生** 入库单 |
| **商品出库** | 并列 | **过期/线下/其他** 业务出库 **不产生** 本模块明细；**库存编辑** **不产生** 出库单 |
| **库存日志** | 下游展示 | 本模块确认后 **写入** 日志；原因 **库存编辑**；方向 **随实际增减** |
| **库存查询** | 下游只读 | 调整后 **可用库存** 即时更新；明细弹窗 **含库存编辑** 流水 |
| **全部订单 / 平台订单** | 间接 | **支付扣减、关单回滚** **不经** 本模块 |
| **售后管理** | 间接 | 退货 **不自动** 改库存；须 **商品入库 · 退货入库** |

### 1.4 数据范围

- **列表纳入：** 请求上下文 **当前店铺** 下 **未逻辑删除** 的 **商品/规格**；
- **列表排除：** 其他店铺商品；**已逻辑删除** 的商品/规格；
- **可调整对象：** 列表中 **任意状态**（草稿/出售中/下架等）的 **未删除** 规格均可调整（与 **商品入库** 可选范围 **一致**）；
- **明细纳入：** 所选 **商品/规格** 在 **本模块** 历史上 **全部已确认** 的调整明细；
- **上下文：** 页头展示 **当前店铺名称**（只读）；切换店铺后 **整页刷新**。

### 1.5 使用端与角色

| 端 | 可操作角色 | 能力 |
|----|------------|------|
| **店铺经营管理端** | **商户经营账号** | 列表、检索、**调整**、**记录** |
| **店铺经营管理端** | 员工（子管理员） | 由 **角色管理** 决定菜单与按钮 |
| **平台管理端** | 平台管理员 | **无** 本模块 |
| **C 端** | 买家/访客 | **不可** 访问 |

---

## 2. 关联需求分析

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

| 编号 / 关联点 | 平台规则 | 本模块体现 |
|---------------|----------|------------|
| **§11 可下单四条件** | 库存 **> 0** 方可下单 | 本模块 **变更** 可用库存；调整后 **即时影响** C 端可售 |
| **O-P4 / O4** | 支付成功 **扣库存** | **不经** 本模块；纠错 **不可** 用调整 **替代** 订单出库留痕 |
| **§10.1 关单回滚** | 已支付关单 **回滚库存** | **不经** 本模块；记 **取消订单返库存** |
| **§9.1 经营账号** | 登录后 **切换当前店铺** | 本模块 **仅操作当前店铺** |
| **§13 非本期** | 多 SKU 完整能力 | 按 **商品 + 规格** 一行；首期单规格时规格列 **可为「—」** |

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

| 项 | 定稿 |
|----|------|
| 支付成功 O4 | 库存已在 **支付** 扣减；**不可** 用本模块「模拟」下单扣减 |
| 待支付关闭 O8 | **未扣** 库存 → **无** 须在本模块处理的订单库存 |
| 已支付关单 §10.1 | **回滚** 由 **订单协作** 完成；**非** 本模块 |
| 账实不符 | 若因 **盘点/录入错误** 须改数 → **本模块**；若因 **漏登记业务出入库** → **商品入/出库** |
| 关联订单 | 调整明细 **不强制** 关联订单号 |

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

| 项 | 定稿 |
|----|------|
| 库存字段 | 商品表单 **库存** = **可用库存**；本模块 **直接修改** 该字段 |
| 新增规格 | **初始库存** 在 **商品保存** 时写入 + **自动入库留痕** → **不走** 本模块 |
| 编辑已有规格库存 | **须至本模块** 调整；**商品列表保存** **不得** 直接改已有规格库存数字（与入库专册 **IN-A7** 一致） |
| 商品状态 | **任意未删除** 状态均可调整 |
| 删商品 | 逻辑删除后 **移出** 本模块列表；**不可** 再调整 |
| 主图/名称 | 列表 **商品名称** 展示 **主图缩略图 + 名称**（与 **库存查询** 列表 **一致**） |

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

| 项 | 定稿 |
|----|------|
| 边界 | **采购/退货/其他入库** → **商品入库**；**库存编辑** → **本模块** |
| 单据 | 本模块 **不产生** 入库单 |
| 日志 | 调增或覆盖后 **净增** → **入库类 · 库存编辑** |
| 纠错 | 入库单 **确认后不可改**；须 **本模块** 或 **商品出库** 等 **另途径** 纠错 |

### 2.5 与商家《商品出库功能需求》v1.0.1

| 项 | 定稿 |
|----|------|
| 边界 | **过期/线下/其他出库** → **商品出库**；**库存编辑** → **本模块** |
| 单据 | 本模块 **不产生** 出库单 |
| 日志 | 调减或覆盖后 **净减** → **出库类 · 库存编辑** |
| 数量上限 | **手工出库** 须 **≤ 可用库存**；本模块 **调减/覆盖** 后库存 **不得为负**（§4.3） |
| 纠错 | 出库单 **确认后不可改**；须 **本模块** 或 **商品入库** 等 **另途径** 纠错 |

### 2.6 与商家《库存日志功能需求》v1.0

| 项 | 定稿 |
|----|------|
| 写入 | 每次调整确认 → **一条** 库存日志（**单规格单次**） |
| 变化原因 | **库存编辑**（与日志专册 §3.2、§3.3 **同名**） |
| 方向 | **实际增加** → **入库类**；**实际减少** → **出库类**；**覆盖后不变** → **仍写日志**，变化量 **0** |
| 字段 | 变化前/后库存、变化量与 **本模块调整明细** **一致** |
| 视角 | **库存日志** = 全店 **全部原因** 流水；**本模块 · 记录** = **仅库存编辑** 明细 |

### 2.7 与商家《库存查询功能需求》v1.0

| 项 | 定稿 |
|----|------|
| 列表 | 两模块 **商品/规格检索口径一致**（名称 + 规格关键词） |
| 实时库存 | 调整确认后 **可用库存** **即时更新**；**库存查询** 列表 **同步反映** |
| 明细 | **库存查询 · 出入库明细** 含 **库存编辑** 行；**本模块 · 记录** 为 **调整专册视图**（含调整类型、操作账号） |
| 入口 | **库存查询** **无** 调整按钮；须至 **本模块** |

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

| 项 | 定稿 |
|----|------|
| 退货 | 商家验收后 → **商品入库 · 退货入库**；**非** 本模块 |
| 仅退款 | **不经** 本模块 |
| 账实 | 若退货已 **手工入库** 仍不符 → 可用 **本模块** 微调 |

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

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

---

## 3. 调整方式与调整类型

### 3.1 调整方式（表单 · 与 UI 一致）

| 方式 | 含义 | 默认 |
|------|------|------|
| **增量更新** | 在 **现有可用库存** 上 **加上** 填写的调整数量；**负值表示减少** | **是** |
| **覆盖更新** | 将 **可用库存直接设为** 填写的调整数量（**非** 在原有基础上加减） | 否 |

**UI 文案（与稿一致）：**

- 增量更新：「在现有库存上增加或减少配额数量，调整数量为负数表示减少」
- 覆盖更新：「将原有库存数量进行覆盖，覆盖后更新为调整数量填写的库存数量」

### 3.2 调整类型（明细 · 与草稿一致）

每次 **确认** 成功后，系统根据 **调整方式** 与 **计算结果** 判定 **调整类型**，写入 **调整明细** 及 **记录** 筛选：

| 调整类型 | 判定条件 |
|----------|----------|
| **增加库存** | **增量更新** 且调整数量 **> 0** |
| **减少库存** | **增量更新** 且调整数量 **< 0** |
| **覆盖库存** | **覆盖更新**（无论覆盖后较原值增、减或不变） |

> **说明：** 草稿「增加/减少/覆盖」体现在 **明细调整类型**；表单仅 **两种调整方式**，与 UI 弹窗 **一致**。

### 3.3 库存计算规则

| 方式 | 计算公式 | 调整前 | 调整后 |
|------|----------|--------|--------|
| **增量更新** | `调整后 = 调整前 + 调整数量` | 确认时点 **当前可用库存** | 上式结果 |
| **覆盖更新** | `调整后 = 调整数量` | 确认时点 **当前可用库存** | 等于填写的 **调整数量** |

**变化量（库存日志口径）：**

| 场景 | 变化量 |
|------|--------|
| 增量 / 覆盖且 **净变化 ≠ 0** | `|调整后 − 调整前|` |
| 覆盖且 **调整后 = 调整前** | **0** |

### 3.4 与库存日志的对应

| 调整结果 | 库存日志方向 | 变化原因 |
|----------|--------------|----------|
| 调整后 **>** 调整前 | **入库类** | **库存编辑** |
| 调整后 **<** 调整前 | **出库类** | **库存编辑** |
| 调整后 **=** 调整前 | **入库类**（变化量 **0**） | **库存编辑** |

> **说明：** 覆盖后 **不变** 仍 **留痕**（变化前 = 变化后，变化量 **0**），便于审计「曾执行覆盖但未变」的操作。

---

## 4. 库存变化规则

### 4.1 写库存口径

| 项 | 定稿 |
|----|------|
| 写入口 | 本模块 **确认** 为 **库存编辑** 场景下 **唯一写可用库存入口** |
| 粒度 | **一次确认** 仅影响 **一个商品/规格** |
| 实时性 | 确认成功后 **立即** 更新 **可用库存**；**库存查询、C 端下单校验** **同步生效** |
| 单据 | **不产生** 入库单/出库单；**仅** 调整明细 + 库存日志 |

### 4.2 数量与格式

| 项 | 增量更新 | 覆盖更新 |
|----|----------|----------|
| **调整数量** 必填 | **是** | **是** |
| 允许负数 | **是**（表示减少） | **否** |
| 允许零 | **否**（**须非零** 整数） | **是**（表示清零） |
| 整数 | **须为整数** | **须为非负整数** |

### 4.3 校验与约束

| 编号 | 规则 |
|------|------|
| **ADJ1** | 调整方式 **必选** |
| **ADJ2** | 调整数量 **必填** |
| **ADJ3** | **增量更新**：调整数量 **≠ 0** 的 **整数** |
| **ADJ4** | **覆盖更新**：调整数量 **≥ 0** 的 **整数** |
| **ADJ5** | 调整后可用库存 **≥ 0**；**增量调减** 或 **覆盖过小** 导致 **负库存** → **整单失败** 并提示 |
| **ADJ6** | 商品/规格须 **属于当前店铺** 且 **未逻辑删除** |
| **ADJ7** | 确认时若规格 **已被删除** → **失败** 并提示 |
| **ADJ8** | 同一规格 **连续多次** 调整 **允许**；每次 **独立** 生成明细与日志 |
| **ADJ9** | 确认后 **不可撤销**；再次纠错须 **新的调整** 或 **业务入出库** |

### 4.4 不可撤销与纠错

| 场景 | 定稿 |
|------|------|
| 调错数量 | **再次调整**（增量反向或覆盖修正） |
| 本应采购入库 | **商品入库 · 采购入库**；**非** 用本模块 **长期替代** |
| 本应过期出库 | **商品出库 · 过期出库** |
| 入/出库单录错 | 单 **确认后不可改** → **本模块** 或 **反向业务单** 纠错 |

---

## 5. 库存调整列表

### 5.1 列表字段

| 列名 | 说明 |
|------|------|
| **商品名称** | **主图缩略图** + **商品名称**（与 UI 一致） |
| **商品规格** | 规格文案；无规格时展示 **—** |
| **操作** | **调整**、**记录**（见 §5.3） |

**默认排序：** 建议与 **库存查询** **一致**（如 **商品更新时间倒序** 或 **商品 ID 倒序**）。

**说明：** 列表 **不展示** 当前可用库存列（UI 稿 **无** 该列）；调整前库存于 **确认时点** 在 **服务端** 读取；商家若需先看库存可至 **库存查询**。

### 5.2 检索

| 条件 | 类型 | 说明 |
|------|------|------|
| **库存搜索** | 文本 | 模糊匹配 **商品名称** 或 **商品规格**（占位「请输入商品名称/商品规格」，与 UI 一致） |

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

| 规则 | 说明 |
|------|------|
| 空关键词 | 展示 **当前店铺** 全部 **未删除** 商品/规格（分页） |
| 无结果 | 空列表 + 友好提示 |

### 5.3 行操作

| 操作 | 说明 |
|------|------|
| **调整** | 打开 **库存调整** 弹窗（§6） |
| **记录** | 打开 **记录** 弹窗（§7）；展示 **该规格** 全部 **调整明细** |

---

## 6. 执行库存调整（弹窗）

### 6.1 入口与形态

| 项 | 定稿 |
|----|------|
| 入口 | 列表行 **「调整」** |
| 形态 | **弹窗**；标题 **「库存调整」**（与 UI 一致） |
| 范围 | **仅** 当前行的 **商品/规格**；弹窗内 **不展示** 商品选择器 |

### 6.2 表单字段

| 字段 | 必填 | 说明 |
|------|------|------|
| **调整方式** | 是 | 单选：**增量更新**（默认）/ **覆盖更新**（§3.1） |
| **调整数量** | 是 | 数字输入（含 **+/−** 步进）；默认 **1**（与 UI 一致）；规则见 §4.2、§4.3 |

**操作按钮：** **取消**（关闭弹窗，**不写** 库存）、**确认**（校验通过后执行 §6.3）。

### 6.3 确认流程

```text
列表行 → 调整
    → 选择调整方式、填写调整数量
    → 确认
        → 校验 ADJ1～ADJ7
        → 读取当前可用库存为「调整前」
        → 按 §3.3 计算「调整后」
        → 更新可用库存
        → 生成调整明细（§7.2）
        → 写入库存日志（库存编辑，§3.4）
    → 关闭弹窗；列表 **可不强制刷新**（无库存列）；**库存查询** 侧 **即时可见** 新值
    → 提示调整成功（或等价文案）
```

### 6.4 取消流程

```text
调整弹窗 → 取消
    → 关闭弹窗
    → 不产生明细、不写日志、不改库存
```

---

## 7. 调整明细与「记录」

### 7.1 入口与形态

| 项 | 定稿 |
|----|------|
| 入口 | 列表行 **「记录」** |
| 形态 | **弹窗**；标题 **「记录」**（与 UI 一致） |
| 范围 | **仅** 当前 **商品/规格** 在 **本模块** 产生的调整明细 |
| 能力 | **只读**；**无** 编辑、删除 |

### 7.2 明细字段（每条确认产生一条）

| 字段 | 说明 |
|------|------|
| **调整类型** | **增加库存 / 减少库存 / 覆盖库存**（§3.2） |
| **调整前数量** | 该次调整 **生效前** 可用库存 |
| **调整后数量** | 该次调整 **生效后** 可用库存 |
| **操作账号** | 执行确认的操作人 **登录名** 或 **姓名**（与入/出库 **经办人** 展示 **一致**） |
| **创建时间** | 确认成功时间；格式 **yyyy-MM-dd HH:mm:ss** |

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

### 7.3 筛选

| 条件 | 类型 | 说明 |
|------|------|------|
| **调整类型** | 下拉 | **全部**（默认）/ **增加库存** / **减少库存** / **覆盖库存**（与 UI 一致） |

### 7.4 空态

| 场景 | 期望表现 |
|------|----------|
| 该规格从未调整 | 空列表 + **「暂无数据」**（与 UI 一致） |
| 筛选无匹配 | 空列表 + 友好提示 |

### 7.5 与库存日志 / 库存查询的差异

| 模块 | 内容 | 典型字段 |
|------|------|----------|
| **本模块 · 记录** | **仅** 库存编辑（本模块确认） | **调整类型**、调整前/后、**操作账号** |
| **库存日志** | **全部** 变化原因 | 变化原因、变化量、操作时间；**无** 调整类型三分法 |
| **库存查询 · 出入库明细** | **全部** 流水（同源日志） | 出入库类型、**带符号数量**、时间 |

---

## 8. 典型业务场景

### 8.1 盘点盘盈（增量增加）

```text
实物多于账面 → 库存调整
    → 增量更新，调整数量 = +N
    → 调整类型：增加库存
    → 可用库存 += N；写日志（入库类 · 库存编辑）
```

### 8.2 盘点盘亏（增量减少）

```text
实物少于账面 → 库存调整
    → 增量更新，调整数量 = −N
    → 调整类型：减少库存
    → 可用库存 −= N；写日志（出库类 · 库存编辑）
```

### 8.3 账实对齐（覆盖）

```text
已知正确库存应为 M → 库存调整
    → 覆盖更新，调整数量 = M
    → 调整类型：覆盖库存
    → 可用库存 = M；写日志（方向视 M 与原值大小）
```

### 8.4 入/出库单录错后的纠错

```text
已确认入库单多录 → 不可改单
    → 本模块 增量更新 −差额
    或 商品出库 · 其他出库（若属业务出库范畴）
```

### 8.5 与商品列表的边界

```text
【新增规格】商品保存 · 初始库存>0
    → 商品保存写库存 + 自动入库留痕
    → 不走本模块

【已有规格】需改库存数字
    → 须本模块库存调整
    → 不走商品入库手工入库
```

---

## 9. 权限与菜单

| 项 | 定稿 |
|----|------|
| 菜单路径 | **库存管理 → 库存调整**（与 UI 一致） |
| 权限粒度 | **菜单可见**、**调整**、**记录查看** 可由 **角色管理** 分配 |
| 数据权限 | **仅当前店铺** |

---

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

| 场景 | 期望提示（示例） |
|------|------------------|
| 调整数量为空 | 请输入调整数量 |
| 增量数量为 0 | 调整数量不能为 0 |
| 覆盖数量为负 | 请输入正确的库存数量 |
| 调整后库存为负 | 调整后库存不能小于 0 |
| 商品已删除 | 商品已不存在，请刷新后重试 |
| 非当前店铺 | 无权操作其他店铺库存 |
| 确认成功 | 调整成功（或等价文案） |

---

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

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

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

---

## 12. 非本期与待建设

| 项 | 说明 |
|----|------|
| **批量调整**（多规格一次提交） | **非本期** |
| **调整单号** 与 **全店调整单列表** | UI **无**；本期 **仅** 按规格 **记录** 明细 |
| **调整原因 / 备注** 字段 | UI **无**；**非本期** |
| **导入调整** | **非本期** |
| **调整撤销 / 反审** | **不做** |
| **从库存查询/商品列表直达调整** | **非本期**（统一入口为本模块列表） |
| **导出 / 打印** | **非本期** |
| 平台端 **代调库存** | **不做** |
| **批次 / 效期 / 多仓库** | **非本期** |

---

## 13. 业务规则汇总

| 编号 | 规则 |
|------|------|
| **ADJ-A1** | 本模块为 **库存编辑** **写库存入口**；**不产生** 入/出库单 |
| **ADJ-A2** | 数据范围 **仅当前店铺**；**未逻辑删除** 商品/规格 |
| **ADJ-A3** | 调整方式：**增量更新** / **覆盖更新**；明细类型：**增加 / 减少 / 覆盖** |
| **ADJ-A4** | **增量** 数量 **可负**；**覆盖** 数量 **非负整数** |
| **ADJ-A5** | 调整后库存 **≥ 0** |
| **ADJ-A6** | 每次确认 → **一条** 调整明细 + **一条** 库存日志（**库存编辑**） |
| **ADJ-A7** | 日志方向 **随实际增减**；**不变** 时变化量 **0** |
| **ADJ-A8** | **新增规格初始库存** → **商品列表**；**已有规格改数** → **本模块** |
| **ADJ-A9** | **不替代** 采购/退货/过期等业务入出库 |
| **ADJ-A10** | 确认后 **不可撤销** |
| **ADJ-A11** | **记录** 仅含本模块明细；**库存日志** 含 **全部** 原因 |
| **ADJ-A12** | 与 **库存查询、库存日志** **同源同口径**（可用库存、前后数量） |

---

## 14. 版本记录

| 版本 | 说明 |
|------|------|
| **v1.0** | 首版定稿：对齐草稿 §1、§3～§4；补全列表/检索/调整弹窗/记录明细/与入出库·日志·查询·商品·订单边界；UI 增量·覆盖与记录筛选；《库存调整功能需求-草稿》**保持不变** |

---

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