review-reconciliation-2026-10-20.md 4.3 KB

2026-10-20 历史抗遗忘工资核定

用户明确确认历史口径:来源、课时时长和计划当天完成日期核实后,按绑定老师计薪;明确学生自习的剔除。历史未保存实际完成账号,核定证据如实记录这一点,不伪造实际操作者。今后新系统复习仍按实际登录账号区分老师操作与学生自习。

执行范围为 2026-09-01 起的历史待核对凭据,以及月份缺失的异常凭据。9 月 1 日前不自动补发的既有规则未变。30 分钟课计 0.5 元,60 分钟课计 1 元;逾期、学生自习和重复副本不计薪。本次只核定收入,没有执行工资发放。

生产结果

月份 本次新增计薪 本次新增金额 核定后有效计薪 核定后工资合计
2026-09 4,501 条 ¥4,107.50 4,504 条 ¥4,110.50
2026-10 796 条 ¥733.00 2,082 条 ¥1,929.50
合计 5,297 条 ¥4,840.50 6,586 条 ¥6,040.00

此前已核定 74 条不计薪:65 条重复副本、9 条逾期补做。重复记录优先保留已计薪凭据,其次已有历史凭据,最后保留最早完成的一份。13 组只有重复副本实际完成,保留其中一份并在本次按历史口径计薪,避免全部排除后漏计。

9 月起的历史待核对已全部清零。10 月页面由历史待核对 783 条、异常待核对 70 条,降为历史待核对 0 条、异常待核对 1 条。唯一保留项是日期和来源均缺失的原始凭据,无法计算。

补齐的核查证据

  • 4 节本地缺失来源课,通过旧系统 content_get 查到原课次,20 条复习的课时时长因此可以确定;保存原始课次快照,不猜测时长。
  • 5,221 条先通过逐批事务回滚试算,再正式计薪 ¥4,764.50。
  • 另 76 条属于史远见陪练(旧账号 1535)。账号被分类为 conflict,核查发现只有 18 条单词练习记录触发学员用途;不存在学员排课、DailyStudyRecord 或课程绑定。旧系统实时 user_info、当前账号和历史原始账号的 ID、用户名及老师分组 3 一致;账号唯一,未查到对应待处理身份冲突事项。因此按已核实老师身份追加计薪 76 条、¥76.00。
  • 对上述仅单词练习导致的分类冲突,历史核定函数要求管理员提交匹配的旧系统身份快照,并再次检查原始账号、老师分组和不存在学员业务关联。缺少证据、姓名不一致或实际存在学员关联均拒绝。保留账号原有分类及登录规则,不将核定依据冒充为实际完成账号。

实现及验证

ReviewRewardResolution 追加核定依据,ReviewRewardIncome 投影核定后的状态和金额。原始凭据、历史完成账号、已存在工资单不改写。明确凭据列表、管理身份、来源、日期、时长、重复关系及未结算状态均由服务端复核,重复执行不重复入账。

  • 执行前保存快照并确认同步租约空闲;所有批次都先进行事务回滚试算,正式写入时重新验证并回读。
  • 第一批 5,221 条、第二批 76 条均正式写入成功。6,663 条范围内原始凭据与执行前逐条一致,已有 PayrollBatch、PayrollLine 完全一致;核定后的计薪键唯一。
  • 最新历史核定规则 11 项测试通过,包括缺少或不符身份证据时拒绝、有真实学员关联时拒绝、保留原账号分类、重复防护和课时时长规则。此前回归 47 项、移动端 43 项、管理端 6 项通过。
  • 双端已区分学生自习、逾期和重复不计薪;前一发布 40b9e39833db74d3b12f0e99595c56d1709cb066 公网校验移动端 106 文件/6 路由、管理端 95 文件/4 路由,CDN 7933812152、7933812572 均完成。本次追加核定只更新数据库数据及单个核定函数,无前端改动。
  • 线上 xs_review_resolve 更新前逐字比对已备份函数,选择性更新后回读验证。管理端 API 回读确认 10 月有效计薪 2,082 条、¥1,929.50、历史待核对 0 条、异常待核对 1 条。

私有审计目录:/Users/mac/.local/state/xiaoshu/cloud-releases/2026-10-20-review-reconciliation/history-approved/。内含执行前后快照、分批试算和执行回执、身份核查快照、函数发布证据及 API 验证。账号和生产明细不提交 Git。