# 成品库返工入库设计

> 状态：已暂停，后续版本再做。
>
> 2026-06-03 业务决策：本版本不实现 `成品库 -> 返工入库`，也不切换为普通返工入库方案。本文仅保留为后续版本讨论参考，当前不可作为实施依据。

## 背景

当前 `退货库 -> 返工出库` 已经能把客户退回且可返工的产品从退货库出库，并生成退货处置记录和返工工单。但 `成品库` 还没有对应的 `返工入库` 入口，返工完成后的成品无法在仓库端形成明确闭环。

本设计采用方案 A：`成品库 -> 返工入库` 必须关联一条已经完成 `退货库 -> 返工出库` 的返工记录。这样能把客户退货、返工出库、返工完成回库、成品库存和原材料库存批次追溯串成一条完整链路。

## 目标

- 在 `嘉恒仓库 -> 成品库` 的入库区新增 `返工入库`。
- `返工入库` 必须选择产品，并关联该产品未完成回库的返工出库记录。
- 选择产品后，系统带出该产品对应的原材料库存批次号多选框，用 `JH...` 原材料库存批次号做追溯。
- 成品库仍以数量为主维度，重量只作为辅助信息或追溯信息，不作为主要库存口径。
- 入库后如果成品库已有该产品，则更新该产品库存余额；同时新增本次返工入库的库存明细和库存流水。
- 避免展示每个仓库自己的无业务意义内部批次号，前端展示时优先展示原材料库存批次号。

## 业务入口

`嘉恒仓库 -> 成品库 -> 入库 -> 返工入库`

该入口建议复用当前普通仓库入库抽屉样式，不另起一个完全不同的页面。字段建议为：

- 产品，必填。
- 返工出库记录，必填，只展示当前产品已返工出库且尚未完成返工入库的记录。
- 原材料库存批次号，可多选，选择范围按产品需规清单中该产品使用的原材料匹配库存批次。
- 入库数量，必填，必须大于 0。
- 入库材料成本，默认可按选中原材料库存批次成本和产品毛重计算，也允许用户按现有成品入库规则调整。
- 入库仓库和库位，默认成品库默认库位。
- 来源/提供方，可选，用于记录返工执行方或内部返工班组。
- 备注，可选。

## 数据流

返工闭环链路：

```text
发货明细
-> 退货库退货入库
-> 退货库返工出库
-> 退货返工处置记录
-> 成品库返工入库
-> 成品库存余额
-> 成品库存流水
-> 原材料库存批次号追溯
```

`返工入库` 创建成功后写入：

- 成品库库存批次明细，业务类型为 `返工入库`。
- 成品库库存余额，按产品数量累加。
- 成品库库存流水，流水类型为 `REWORK_IN` 或对应中文展示 `返工入库`。
- 返工处置记录关联的回库数量派生数据，来源于本次成品库库存批次和库存流水。
- 来源原材料库存批次号字段，用于后续成品库明细、销售出库、发货台账、退货追溯展示。

## 返工记录状态

返工出库记录不新增独立状态字段。本次通过 `成品库返工入库` 关联的库存批次和库存流水汇总已回库数量，并派生以下展示状态：

- `待回库`：已从退货库返工出库，但尚未做成品库返工入库。
- `部分回库`：返工入库数量小于返工出库数量。
- `已回库`：返工入库数量达到返工出库数量。

返工入库的库存批次和库存流水必须记录：

- `source_doc_type = RETURN_DISPOSITION`
- `source_doc_id = 返工处置记录ID`
- `source_line_id = 退货明细ID或返工处置记录ID`

待回库和部分回库列表按 `返工出库数量 - 已返工入库数量` 计算，避免额外维护一套容易不同步的状态字段。

## 数量规则

成品库返工入库以数量为主。

校验规则：

- 必须选择成品库。
- 必须选择产品。
- 必须选择返工出库记录。
- 返工出库记录的产品必须和入库产品一致。
- 入库数量必须大于 0。
- 入库数量不能超过该返工出库记录的剩余可回库数量。
- 原材料库存批次号可以多选；如果用户未选择，允许保存，但追溯信息会显示为空或未指定。
- 如果选择了原材料库存批次号，只记录追溯关系，不扣减原材料库存。

## 原材料库存批次追溯

返工入库的原材料库存批次号用于说明该返工成品来源于哪些原材料库存批次，不代表本次重新消耗原材料。

选择逻辑：

- 用户先选择产品。
- 系统根据产品需规清单找到该产品使用的原材料。
- 下拉多选框列出这些原材料在原材料库中的库存批次号。
- 可用批次优先展示，不可用批次置灰排后；是否允许勾选不可用批次按现有追溯选择组件规则执行。
- 保存后写入 `source_material_lot_id`、`source_material_sub_batch_no`、`source_material_summary` 等现有追溯字段。

展示规则：

- 成品库库存明细和流水中，`库存批次号` 展示应优先使用来源原材料库存批次号。
- 如果多个原材料库存批次号参与追溯，显示为 `JH...、JH...`。
- 不把成品库内部批次号作为主要业务展示字段。

## 成本规则

成品库页面中的成本字段沿用当前成品库口径：成品按件管理，成本按每件辅助展示。

返工入库建议默认成本：

```text
入库材料成本(毛重；元/件) = 选中原材料库存批次成本加权单价 × 产品毛重
```

如果没有选择原材料库存批次，或无法取到产品毛重，则默认成本为 0，并允许用户按现有成品入库规则手动填写或后续补录。

返工产生的额外人工成本仍保留在退货处置记录中，不在本次返工入库中重复计算，避免成本重复归集。

## UI 设计

成品库入库区新增一个 `返工入库` 操作按钮，和 `生产入库`、`委外入库`、`期初入库` 保持同一套风格。

抽屉交互：

1. 用户点击 `返工入库`。
2. 选择产品。
3. 返工出库记录下拉框刷新，只显示该产品待回库或部分回库记录。
4. 系统展示返工摘要，例如退货单、客户、返工出库数量、已回库数量、剩余可回库数量。
5. 原材料库存批次号使用标签多选框。
6. 用户填写入库数量、来源/提供方、备注。
7. 保存后关闭抽屉并刷新成品库库存、流水和返工记录状态。

## 接口与字典

建议新增入库业务类型：

- 内部值：`REWORK_IN`
- 中文展示：`返工入库`
- 允许仓库：`FINISHED`
- 库存流水类型：`REWORK_IN`

前端字典、状态展示和库存流水展示必须使用中文，不展示英文内部值。

## 错误提示

错误提示使用明确中文：

- `请选择返工出库记录`
- `该返工记录不属于当前产品`
- `返工入库数量必须大于0`
- `返工入库数量不能超过剩余可回库数量`
- `成品库不允许执行该入库业务`

## 测试重点

- 成品库入库区出现 `返工入库` 操作。
- 返工入库必须选择返工出库记录。
- 产品选择后，只列出该产品的待回库返工记录。
- 入库数量大于 0 才能提交。
- 入库数量超过剩余可回库数量时后端拒绝。
- 保存后成品库库存余额按数量增加。
- 保存后生成 `返工入库` 库存流水。
- 保存后返工记录状态更新为部分回库或已回库。
- 成品库库存明细和流水展示原材料库存批次号，而不是内部批次号。
- 原材料库存批次号只做追溯，不扣减原材料库存。
- 前端字典和值展示不出现英文 `REWORK_IN`。

## 非目标

- 本次不改小程序报工流程。
- 本次不把返工入库纳入普通生产工单完工入库结单逻辑。
- 本次不重做退货库返工出库，只补齐其在成品库的回库闭环。
- 本次不引入新的仓库维度或新的独立批次展示体系。
