cmvr-wms/docs/purchase-project-refactor.md

59 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 采购与项目经费改造说明
## 目标
本次改造将采购从独立申请单升级为项目经费闭环:
`项目分科目预算 -> 采购申请占用 -> 分批到货验收 -> 实际支出 -> 项目来源库存批次 -> 项目领用`
## 采购主线边界
- 项目:项目基本信息、负责人、成员及访问范围。
- 经费:经费科目、项目分科目预算、占用金额、支出金额和不可变流水。
- 采购申请:项目、经费科目、预计含税单价、预计金额及采购状态。
- 采购导入:普通 Excel、带下拉选项的模板、表格粘贴和智能识别结果均须补齐项目、科目和预计单价。
- 到货验收:支持分批到货、实际含税单价、实际金额、拒收和未入库前撤销验收。
- 入库:验收通过生成待入库单;确认入库后生成带来源项目、经费科目和实际成本的库存批次。
- 出库:按库存批次扣减,记录来源项目与使用项目;跨项目使用须有权限和原因。
AI 指令审计、批量导入性能、移动端和仪表盘调整与采购主线共享同一未提交工作区,但不属于采购闭环的最小发布范围,提交时应单独审查。
## 经费规则
- 新增采购申请:按 `需求数量 * 预计含税单价` 增加占用金额。
- 修改有效申请:按新旧预计金额差额调整占用;更换项目或科目时先释放原占用,再占用新预算。
- 取消或删除申请:释放尚未结算的预计占用。
- 验收通过:按本批数量对应的预计金额释放占用,并按实际金额增加支出。
- 撤销已通过验收:仅允许在对应入库单尚未确认时执行,同时恢复占用并冲回实际支出。
## 数据库升级
1. 备份目标数据库。
2. 执行 `select database();`,确认连接的是预期数据库。
3. 执行 `sql/wms_optimization_20260916.sql`。
4. 执行 `sql/wms_project_management_20260922.sql`。
5. 再次执行第 3、4 步,确认脚本可安全重放。
6. 检查 `project_info`、`expense_category`、`project_budget`、`project_fund_ledger`、`stock_lot` 和 `out_record_lot`。
## 最小回归清单
1. 创建进行中的项目,将测试用户加入项目并配置一个经费科目预算。
2. 新建采购申请,确认预计金额和项目预算占用同步增加。
3. 修改数量或预计单价,确认只产生差额占用流水。
4. 登记部分到货并验收通过,确认采购状态为部分到货、占用减少、实际支出增加,并生成待入库单。
5. 确认入库,检查库存汇总和 `stock_lot` 的来源项目、科目、采购申请、到货记录及单位成本。
6. 对第二批到货验收,确认采购状态变为已到齐。
7. 对尚未确认入库的验收执行撤销,确认待入库单删除、经费恢复且采购状态回退。
8. 验证预算不足、超量到货、非项目成员、已归档项目和重复提交均被拒绝。
## 当前验证状态
- 2026-09-28 在 `wms-test`(MySQL 8.0.36)执行升级前 50 张基础表的数据与结构快照,备份库为 `wms_test_backup_20260928_103302`。
- `wms_optimization_20260916.sql` 和 `wms_project_management_20260922.sql` 均连续执行两遍成功,重放后业务表行数保持不变。
- 真实 Spring 服务与测试库事务回归通过,测试数据已全部回滚。覆盖:项目预算、采购占用、预计金额调整、部分到货、验收结算、撤销验收、再次验收、确认入库、库存批次成本和采购到齐。
- 回归发现并修复了“撤销后再次验收复用旧幂等键,导致经费不重新结算”的问题;验收流水幂等键现按验收周期生成。
- 后端 `mvn clean test`:通过,但仓库暂时没有常驻自动化测试源文件。
- 前端 `npm run build:prod`:通过,存在包体积告警。
- 2026-09-28 发布前已备份 `wms-dev`,备份库为 `wms_dev_backup_20260928_105015`;升级脚本连续执行两遍成功,基础表由 42 张增至 50 张,原业务表行数保持不变。
- `wms-dev` 真实 Spring 服务事务回归通过并完成回滚校验,未保留测试项目、采购、到货、入库或库存批次数据。