feat(migration): V8 业务答复口径落实——审批开关默认开启、撤试用期统一参数、经理基数开关、台账分摊唯一键
- #5/#7 答复默认开启:两审批开关 default 翻 1,插 10-19 生效行保时点历史 - #16 答复逐人维护:撤 probation.salary.basic(无业务消费点,月结已读 personnel.salary_standard) - #12 答复参数化:新增 manager.personal.included(默认 0=不计入聚合基数) - #1 答复分配绩效铺路:台账 uk 扩为 (receipt_id, calc_version, personnel_id) 支持分摊拆行 - schema_sync 解析器过滤 ADD CONSTRAINT 误捕获 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
1 parent
238a38c356
commit
0e8c5713fa
8 files changed
+282
-45
No files matched your search
@@ -190,13 +190,14 @@ def _purge_test_data() -> None:
|
||||
# 审批单无 t_ 前缀可用,按 AP 编号前缀全量清(steps 外键 CASCADE 随删;
|
||||
# ref_id 固化无外键,业务已在上一步删除,无悬挂影响)
|
||||
session.execute(delete(ApprovalOrder).where(ApprovalOrder.order_no.like("AP%")))
|
||||
# 开关参数恢复种子基线:测试提交的变更批次条目 id 均大于种子终值 22
|
||||
# (V3 十九条 + V6 两条 + V7 调整单开关一条),删新条目与新批次后解析
|
||||
# 回退到种子值(开关=0)
|
||||
stray_values = list(session.execute(select(ParamValue).where(ParamValue.id > 22)).scalars())
|
||||
# 开关参数恢复种子基线:测试提交的变更批次条目 id 均大于种子终值 25
|
||||
# (V3 十九条 + V6 两条 + V7 调整单一条 + V8 经理基数开关一条;V8 另
|
||||
# 插入两个审批开关的 10-19 生效行 id 23/24,均属种子),删新条目与
|
||||
# 新批次后解析回退到种子值
|
||||
stray_values = list(session.execute(select(ParamValue).where(ParamValue.id > 25)).scalars())
|
||||
if stray_values:
|
||||
stray_batches = {v.batch_id for v in stray_values}
|
||||
session.execute(delete(ParamValue).where(ParamValue.id > 22))
|
||||
session.execute(delete(ParamValue).where(ParamValue.id > 25))
|
||||
session.execute(delete(ParamChangeBatch).where(ParamChangeBatch.id.in_(stray_batches)))
|
||||
# 系统设置恢复种子单行(test_settings 会改公司名/传 logo——残留会让
|
||||
# 后续 e2e 的品牌断言在污染状态下运行);uploads 下的测试 logo 一并删
|
||||
|
||||
@@ -61,7 +61,10 @@ def _migration_final_state(paths: list[Path]) -> dict[str, set[str]]:
|
||||
for table, columns in _parse_tables(sql).items():
|
||||
merged.setdefault(table, set()).update(columns)
|
||||
for table, column in _ALTER_ADD.findall(sql):
|
||||
merged.setdefault(table, set()).add(column)
|
||||
# ADD CONSTRAINT ... UNIQUE 的「CONSTRAINT」不是列(与 _parse_tables
|
||||
# 的约束关键词同一份清单过滤),V8 台账唯一键三列扩展即此形态
|
||||
if column.upper() not in _NON_COLUMN_KEYWORDS:
|
||||
merged.setdefault(table, set()).add(column)
|
||||
for table, column in _ALTER_DROP.findall(sql):
|
||||
merged.setdefault(table, set()).discard(column)
|
||||
return merged
|
||||
|
||||
@@ -18,7 +18,8 @@ from app.services.param_registry import (
|
||||
validate_and_normalize,
|
||||
)
|
||||
|
||||
# 与 db/migration 迁移种子保持一致的 19 项编码(V3 十六项 + V6 审批开关两项 + V7 调整单开关)
|
||||
# 与 db/migration 迁移种子保持一致的 19 项编码(V3 十六项 + V6 审批开关两项
|
||||
# + V7 调整单开关;V8 撤试用期统一工资参数 #16、增经理个人户基数开关 #12)
|
||||
EXPECTED_CODES = {
|
||||
"salesperson.rate.start",
|
||||
"salesperson.rate.slope",
|
||||
@@ -35,10 +36,10 @@ EXPECTED_CODES = {
|
||||
"product.threshold",
|
||||
"salary.basic.mode",
|
||||
"probation.annual.threshold",
|
||||
"probation.salary.basic",
|
||||
"approval.secondary_allocation.enabled",
|
||||
"approval.monthly_settlement.enabled",
|
||||
"approval.adjustment.enabled",
|
||||
"manager.personal.included",
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user