liuwenxin
|
ccfd20651b
|
feat(calc): 二次分摊拆行与 #12 单笔侧开关——按方案比例拆给参与人、余额归负责人
- _personal_rate 的 TPL_MANAGER_SHARE 分支读 manager.personal.included:1=按业务员递减公式计提,0=单笔落 0(现状)
- _load_allocations 装载生效方案并防御拦截(合计超 100%、参与人含负责人)
- _persist_ledger 拆行落库:参与人=份额×比例(q2)、负责人=q2 全额−已分累计(行合计守恒防分漂);快照带 alloc_plan/alloc_role/alloc_ratio
- _prepare_mode 重算改 list_active_by_receipt 作废全部拆分行;uk 三列版支持同回款按人多行
- business_service 保存侧同口径校验(超 100% 400、负责人自分 400、hint 文案定稿)
- 集成用例 +5(拆行守恒/叠加进度登记/重算全作废/双拦截)+保存侧 3 条
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 13:15:59 +08:00 |
|
liuwenxin
|
76ded6d5ec
|
fix(m3): code-review P1——锁定不变量、入结回填与双轨漂移
- 月结锁定拦截补全:原仅新增回款一处,现覆盖回款编辑(原月+新月,防跨月
搬数)/删除、发货新增(按发货日)/编辑(原月+新月)/删除、核算与重算
(已审定月份金额只走调整单);拦截先于「被引用/已核算」判定
- 台账 settlement_id 回填落地:generate 在 replace_items 后回填纳入行、
重生成前先解绑(clear_ledger_settlement_id)——不回填/不解绑会让
「未入结」判据失效:重生成漏算整月或把已固化行反复计入
- 经理聚合行落库:原只进内存参与 items 汇总,台账表永远无 calc_type=2
行、报表下钻落空;重生成先作废旧聚合行(deactivate_month_aggregates),
_confirm_scope 限定计算类型避免聚合行混入单笔池
- 月结取参锚定所属月月末(_month_end):原用 date.today(),补生成历史
月份时分成/月工资口径随生成日漂移;聚合行 receipt_date 同步为月末
- generate/submit 出参固化前置到 commit 之前(commit 后 SELECT 失败会把
已生成的月结记成失败审计,与库中事实相反)
- V9 迁移:business_secondary_allocations 唯一键条件式补齐(幂等裸 SQL,
临时库验证「无键→补」「有键→跳过」两分支),修复旧 V6 升级库拿不到
V6 就地加入的约束;V8 迁移 revision 声明补类型注解(原格式漂移使
schema 同步测试的 head 推断静默漏检 V8);init-dev 版本号推进至 V9
- V7 留存 SQL 约束/索引名单数改复数(与 alembic op.f 与 init-dev 对齐,
消除 SHOW CREATE TABLE 双轨漂移)
- 测试:显式控制审批开关(不依赖 V8 翻转后的种子默认值);新增回归 8 例
(回填落库/聚合不重复/月末取参/月末纯函数 5 例/锁定拦截回款与发货与
核算);全量 773 passed
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 11:59:49 +08:00 |
|
liuwenxin
|
22a2872100
|
feat(calc): 重算授权留痕与批量核算
- calc_receipt 双模式:recalc_reason 非 None=重算(audit action=重算/
reason 留痕、作废旧版本行、calc_version 自动递增、CAS 仅首算执行——
重算状态本就是已核算,误跑 CAS 会误报并发撞车)
- recalc_receipt 薄委托(reason 必填、未核算过 400);重算授权
require_roles(admin, finance),营销后勤不可重算
- batch_calc:逐笔独立事务不开外层 audit(嵌套禁令),逐笔成败清单
(同业务第二笔回款走 #25 重复分支 ok=True/repeated=True)
- 测试 +5:重算版本对/原因缺失 400/未核算重算 400/越权 403/批量清单
- 修 next_version 空表 max NULL → int(None) TypeError
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-16 21:49:44 +08:00 |
|
liuwenxin
|
df1a3839a1
|
feat(calc): 单笔回款核算引擎与绩效台账
- calc_service.calc_receipt:锁回款行→settlement_status=0 校验→发货批次/
归属前置→resolve_snapshot(回款日)→按 calc_template 分派(与 _preview_rate
同构,‰÷1000 防线)→items 行级折算(行类别阈值,混合按行汇总)→
barter/起付/R→台账 v1→CAS 置已核算,单 audit 事务
- 策略点集中:_personal_rate(#12 经理个人户单笔落 0 待答复)、_row_profit
(#20 不含税原样);核算粒度 #25 一期口径=业务级一次性计提(重复回款
repeated=True 仅登记进度)
- 台账仓储:生效行查询/业务级判定/版本号;schemas LedgerOut/Query
- api /api/v1/calc/*:台账分页/详情/核算触发(写限 admin+marketing_ops)
- 测试 8 例:金标准双类别复算到分(DB 锚定 4000.00/39.11/39.11)、
一次性计提、已核算 400、未指定批次、成本缺失行保守 -3000、负绩效照算、
准入、列表筛选;行级明细折算两位固化
- conftest 清理顺序修正:V7 台账/月结清理移到回款/人员删除之前
(RESTRICT 外键不挡序)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-16 20:52:02 +08:00 |
|