PayrollManagementSystem/backend/tests/integration
liuwenxin 4c32a556de feat(approval): 审批单内容快照与二次分配方案版本化
补齐 code-review 遗留 2 项:审批单此前只固化 ref_id/refer_no 指针,复核者看到
的是业务当前内容;二次分配方案在编辑替换与驳回清空时一律物理删除,方案事实
无处回溯。

- 审批单加 version_no 与 snapshot_json(信封 schema_version/order_type/
  captured_at/data);二次分配、月结、调整单三类提交均固化送审内容,开关关闭
  的自动通过路径同样写快照;详情按 snapshot/live/missing 三态回显,历史单
  只读回退当前内容并显式告警,不回填历史快照
- 二次分配方案行改 append-only 版本化(version_no/is_active,唯一键扩为
  business+version+personnel):编辑替换与驳回清空只置历史,核算与详情默认
  只取生效行,业务详情新增 allocation_history
- 送审内容未变不重提、方案未变不新增版本:判据统一为送审内容,两个
  version_no 语义解耦(方案版本=内容第几版,审批单版本=第几次送审)
- 审批单列表、工作台待办、审批超时预警三处 defer 快照列,避免整列拉取
- 月结提交取行加 for_update,防并发提交算出重复的审批单版本号
- 修复审批类型筛选上界 le=2(调整单无法筛选)、快照金额把空值写成 0.00
- V11 迁移三件套同步(Alembic / db/migration / init-dev.sql)

测试:单元 +16(方案内容比较 10、审批入参 6)、集成 +12;全量 891 passed。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 18:30:51 +08:00
..
__init__.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
conftest.py feat(dashboard): 工作台四区块实时聚合与风险预警参数 2026-10-19 18:44:15 +08:00
factories.py refactor(test): 集成工厂上提共用,submit_change 拆校验段,审计重试断言对齐全局兜底 2026-10-15 10:58:44 +08:00
test_approval_flow.py feat(approval): 审批单内容快照与二次分配方案版本化 2026-10-20 18:30:51 +08:00
test_audit_retry.py refactor(test): 集成工厂上提共用,submit_change 拆校验段,审计重试断言对齐全局兜底 2026-10-15 10:58:44 +08:00
test_auth_flow.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
test_business_roles.py fix(report): 报表统计修复批次——对账口径、导出审计与月份校验 2026-10-20 09:44:43 +08:00
test_businesses.py feat(calc): 二次分摊拆行与 #12 单笔侧开关——按方案比例拆给参与人、余额归负责人 2026-10-19 13:15:59 +08:00
test_calc.py feat(calc): 二次分摊拆行与 #12 单笔侧开关——按方案比例拆给参与人、余额归负责人 2026-10-19 13:15:59 +08:00
test_customers.py style(backend): ruff format 统一此前批次的排版残留 2026-10-14 18:46:43 +08:00
test_dashboard.py fix(dashboard): 修复普通用户落地页与待办角色过滤 2026-10-20 09:45:03 +08:00
test_health.py chore: 初始化项目结构与登录鉴权模块 2026-10-09 18:46:36 +08:00
test_log_query.py feat(system): 完成后端系统管理(审计/角色/操作日志/日志查询) 2026-10-10 16:28:04 +08:00
test_no_generator.py fix(no_generator): 编号 MAX 检索改长度优先排序,破解位宽进位后字典序失效 2026-10-14 14:09:30 +08:00
test_param_management.py feat(dashboard): 工作台四区块实时聚合与风险预警参数 2026-10-19 18:44:15 +08:00
test_personnel.py style(backend): ruff format 统一此前批次的排版残留 2026-10-14 18:46:43 +08:00
test_products.py fix(product): 删除引用保护/单价小数位校验,IntegrityError 全局兜底转 400 2026-10-14 18:48:32 +08:00
test_ratings.py fix(rating): 区间重叠判定改用锁定读取,防并发重叠双提交 2026-10-14 19:01:11 +08:00
test_receipts.py refactor(test): 集成工厂上提共用,submit_change 拆校验段,审计重试断言对齐全局兜底 2026-10-15 10:58:44 +08:00
test_reports.py fix(report): 报表统计修复批次——对账口径、导出审计与月份校验 2026-10-20 09:44:43 +08:00
test_role_management.py feat(system): 完成后端系统管理(审计/角色/操作日志/日志查询) 2026-10-10 16:28:04 +08:00
test_schema_sync.py feat(migration): V8 业务答复口径落实——审批开关默认开启、撤试用期统一参数、经理基数开关、台账分摊唯一键 2026-10-19 11:09:05 +08:00
test_secondary_allocation.py feat(approval): 审批单内容快照与二次分配方案版本化 2026-10-20 18:30:51 +08:00
test_settings.py feat(settings): 公司信息配置与 logo 管理(public 端点供登录页) 2026-10-15 18:22:12 +08:00
test_settlements.py feat(approval): 审批单内容快照与二次分配方案版本化 2026-10-20 18:30:51 +08:00
test_shipments.py refactor(test): 集成工厂上提共用,submit_change 拆校验段,审计重试断言对齐全局兜底 2026-10-15 10:58:44 +08:00
test_user_management.py feat(system): 完成后端系统管理(审计/角色/操作日志/日志查询) 2026-10-10 16:28:04 +08:00