# 10-B 已入库采购退货办理段开发复验

已入库退货的办理页和来源选择接口已完成本地开发。10-B 整项仍为部分完成：未入库拒收、供应商交接、换货补到和财务红字分别保留，不能用本页代替这些业务完成记录。

依据为详设 01 V1.0、06 V1.1 §4.6、10 V1.2、10A V1.0，以及内部任务 10-B。已只读核对《5.  入总库(39-42)改入库单.xlsx》的“物资收货通知单&收货单”“到货&验收台账（不改）”“入库单”三张表；42 采用改版，41 的版式待决不由本次裁定。补充字段对照和交接样表草案见 [10-B 补充表单](10-b-purchase-return-form-2026-09-13.md)。

## 已交付与操作说明

1. 入口 `/supplycores/purchase-return`，位于“到货与入库”，库存流转页也提供链接。列表支持状态筛选、分页、详情和刷新，显示原入库单号、供应商、仓库、数量及单据金额。
2. 新建时搜索并选择当前组织/仓库范围内已审核的原入库单。逐行带出物料全码、名称、单位、原入库数量、净已退量、剩余可退量、原单价和税率，并保留批次、货位引用。页面仅填写单号、日期、原因、本次数量；数量最多四位小数。
3. 保存为待审单，不扣库存。保存后由具有审批动作权限的岗位审核；审核通过沿用 10-A 的事务和原行累计量检查后扣库存。页面明确提示审核会产生库存变化。
4. 待审可审核、驳回或作废；已审可在另行授权后冲销。已驳回单保留终态，重新办理需选原单新建；本次没有改变五状态机或增加草稿修改、自动工作流发起、独立发货确认。
5. 新增 `GET /api/supply-cores/purchase-returns/sources` 与 `sources/{receiptId}`，列表支持单号过滤和分页，详情只允许已审来源。读取接口与审批共用 `PurchaseReturnManager.GetUsedAsync`：待审不预占，完整冲销才释放额度，历史来源缺失继续明确失败。读取不写并发版本或业务数据。
6. 直接 API 审批人取当前账号关联的有效 Nova Person，不再信任旧 `approverUserId` 参数。旧参数保留兼容，旧 long 审批人置空，现有 Guid 字段记录实际审批人。工作流已有状态回调未在本次改造。
7. 单据金额沿原入库价；实际扣库和反向流水继续沿用库存成本规则。详情显示库存流水引用。财务只展示 `NcVoucherNumber` 的真实回写值，不把既有模拟 `NcVoucherNo` 或接口成功状态显示为财务已完成。
8. 保存/审批忙碌时防止重复提交；读取失败保留失败状态、提供重试，保存失败保留填写内容，审批失败保留确认框和原状态。原单明细失败可以直接重试该原单。

查询、页面仍使用 `SupplyCore.Inventory`，四种写动作分别使用 `SupplyCore.PurchaseReturn.Create/Approve/Void/Reverse`，驳回复用 Approve。沿用 10-A 的人工授权边界，未擅自给普通岗位增加采购退货审批权；普通岗位职责仍须业务确认。

## 验证记录

- `dotnet restore SupplyCores.slnx` 成功；解决方案 build 0 错误，最后一轮有 1 条既有数据治理测试的可空参数警告。新接口、DTO、审批方法和全部构造函数调用点同批编译通过。
- Application 采购退货、Sprint5a 与菜单/权限筛选 118 项通过。新增覆盖来源名称/价格/税率、待审不预占、审批后减少可退量、冲销后恢复额度、分页过滤、未审来源拒绝、跨组织/仓库不可见、读取失败及无有效人员时不扣账/不推 NC。
- Domain 采购退货 21 项通过，抽取累计量读取方法后原 10-A 规则保持通过。
- Chromium 采购退货 11 项通过；与退料页组合回归 24 项通过。包含各动作专岗、原价/税率/批次/货位请求契约、超量阻断、来源和列表重试、失败保留数据、重复保存、焦点恢复、模拟财务号不显示为真号、375/768/1024/1440 宽度检查。
- TypeScript、Vite、正式菜单、品牌 token 门禁通过。正式页面数 69 → 70，只更新已新增页面的数量，既有门禁风险基线未扩张。375px 与 1440px 截图已检查，表格独立横向滚动，页面无横向溢出。

本地仓储替身、模型及浏览器模拟接口不替代正式岗位或真实 PostgreSQL 事务/并发复验。2026-09-13 本批代码与记录已提交 `8218132e`，实际范围已回写设计仓本期记录；尚未推送或部署本批应用代码，未修改共享库、未新增迁移。

## 正式复验与剩余交付

部署并配置岗位后，统一在 `https://test.fxkyjt.cn` 现有共享库执行，不另建复验库。

1. 原入 6、已退 2：原单选择显示可退 4；新建退 4，保存后库存不变、待审；审批后库存扣减 4，再退 1 被拒。
2. 冲销退 4，核对原行可退量恢复 4、库存按原实际扣库金额回补、反向双链与重复冲销不多记。
3. 用只读、创建、审批、冲销专岗直接调用 API 并操作页面；核对跨矿/跨仓不可见、客户端不能伪造审批人、无有效人员关联时清晰提示。
4. 两会话并发审批、货位冻结、库存预占/不足、最终保存失败的整笔回滚，沿 [10-A 复验清单](10-a-purchase-return-verification-2026-09-13.md) 留真实库存与流水证据。
5. 原单读取中断、额度被其他单据使用后保存/审批失败，核对填写内容保留，刷新后可继续办理。
6. 供应商交接样表须确认并接入持久化记录；未入库拒收仍沿收货异常办理，不能调用本页扣库存。换货补到、财务红字和真实回执分别联调验收。

10-B 状态仅记“已入库办理段开发完成，整项待补齐与业务复验”，不关闭 OPEN-044 或相关正式检查点。
