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
@@ -5,15 +5,20 @@ is_active 翻 0 —— 这是全表唯一的受控 UPDATE(模型注释与 test
|
||||
均已声明例外),行内容永不改写;历史版本可回溯(重算授权留痕的需求口径)。
|
||||
|
||||
防重三层:服务层 CAS(UPDATE ... WHERE settlement_status=0,rowcount=0
|
||||
即 400)+ FOR UPDATE 行锁 + 库级 uk(receipt_id, calc_version) 兜底。
|
||||
即 400)+ FOR UPDATE 行锁 + 库级 uk(receipt_id, calc_version, personnel_id)
|
||||
兜底。uk 含 personnel_id:二次分配分摊(澄清 #1 答复 2026-10-19,分配
|
||||
绩效——按方案比例拆给参与人、余额归合同负责人)后同一回款同版本按人
|
||||
各落一行,拆分仍是「一次核算」的组成部分;聚合行 receipt_id 为 NULL,
|
||||
MySQL 唯一索引对 NULL 不去重,天然不约束。
|
||||
|
||||
经理聚合行(calc_type=2,receipt_id 为 NULL):月度批处理时按「本团队
|
||||
业务员绩效 ×12.5% + 全公司 ×5%」落一行;其唯一性由月结生成的
|
||||
settlement_month 串行化 + 服务层保证(MySQL 无部分唯一索引,docstring
|
||||
声明即可)。
|
||||
|
||||
#12 策略点(待业务答复):经理个人户业绩暂不计入聚合基数——聚合集中
|
||||
在 settlement_service 的聚合函数,答复后只改该函数。
|
||||
#12 答复(2026-10-19):经理个人户业绩是否计入聚合基数改为参数
|
||||
``manager.personal.included``(默认 0=不计入)——消费点在 settlement_service
|
||||
的聚合函数。
|
||||
"""
|
||||
|
||||
from datetime import date
|
||||
@@ -43,11 +48,14 @@ class PerformanceLedger(Base, TimestampMixin):
|
||||
__tablename__ = "performance_ledgers"
|
||||
__table_args__ = mysql_table_args(
|
||||
"绩效核算台账表(append-only 版本行;重算插新版本旧行仅翻 is_active)",
|
||||
# 库级防重兜底:同一回款同版本仅一行(服务层 CAS+行锁之外的第二道
|
||||
# 闸);聚合行 receipt_id 为 NULL,MySQL 唯一索引对 NULL 不去重,
|
||||
# 天然不约束聚合行
|
||||
# 库级防重兜底:同一回款同版本按人仅一行(分摊拆行后负责人+参与人
|
||||
# 各占一行;服务层 CAS+行锁之外的第二道闸)。聚合行 receipt_id 为
|
||||
# NULL,MySQL 唯一索引对 NULL 不去重,天然不约束聚合行
|
||||
UniqueConstraint(
|
||||
"receipt_id", "calc_version", name="uk_performance_ledgers_receipt_id_calc_version"
|
||||
"receipt_id",
|
||||
"calc_version",
|
||||
"personnel_id",
|
||||
name="uk_performance_ledgers_receipt_id_calc_version_personnel",
|
||||
),
|
||||
Index("idx_performance_ledgers_month_active", "settlement_month", "is_active"),
|
||||
Index(
|
||||
|
||||
Reference in new issue
Block a user