payroll-repair-2026-10-12.md 5.8 KB

2026-10-12 工资及业务列表修复验收

本次针对 2026 年 10 月工资预览中的 47 条课酬异常、抗遗忘工资为零及业务列表数据不完整进行核查和修复。生产数据按原始业务编号、记录版本及完成凭据核对;不覆盖已保存工资快照,不改写课时余额,不生成工资批次或发放记录。

原因及处理

  1. 47 条课酬异常:均属于通用“阅读写作”课程,缺少可用于计价的学段分类,涉及 18 名学员。课程名称本身不能区分小学、初中、高中。根据同学年已有人工确认记录、旧系统明确资料及用户补充的 6 人实际学段,逐预约保存分类和核对依据。没有为通用课程设置统一学段映射。用户补充的 6 人学段也写入新系统档案,保存前核验为空或与确认一致。
  2. 已完课记录无法在学段核对入口处理:原列表只返回未开始预约。现同时返回所选工资月份中已完课的待核对预约,以工资规范来源的上课月份为准;确认后刷新工资预览。
  3. 历史有效复习为零:导入凭据默认是零元“历史待核对”,不能直接推定旧系统尚未发放。用户已明确确认 10 月未发放;核验 1,267 条凭据后执行每条 1 元的计薪确认。其中 1,266 条与旧系统完成记录逐字段一致,另 1 条有新系统首次完成时间及原始凭据创建时间证据。确认事务保留来源、老师、学生、日期及防重复校验,并记录审计。
  4. 新系统完成旧待办复习仍被识别为历史:触发器只看旧来源标记,导致导入的待完成任务在新系统完成后仍生成零元凭据。现由经过身份校验的完成函数在事务内标记具体帐套和任务,使用服务器完成时间并计 1 元;同步写入历史完成状态仍保持零元。重复完成保留首次凭据和金额,事务上下文在成功或异常时恢复。
  5. 已同步却显示“尚无成功记录”:展示原来只读取同步桥检查点。现读取真实旧接口手动同步审计收据,展示该批次完成时间及保留差异。该收据不会伪造桥检查点,也不会放开结算。
  6. 业务列表停在 5,000 条:预约、上课记录和每日学习列表先截取前 5,000 条,再进行搜索、分页及统计。现对绑定、预约、上课和每日学习列表统一在数据库内搜索、计数和分页,同一语句快照返回总数与当前页;保留帐套、学员过滤和稳定排序。上课记录同时补齐学生姓名,并从预约读取已确认课程分类。

生产回读结果

10 月收入预览 修复前 修复后
有效课次 154 201
工时 144.5 191.5
课酬 4,820 元 7,940 元
有效复习 0 1,267
抗遗忘工资 0 元 1,267 元
当月收入 4,820 元 9,207 元
课酬异常 47 0

V1 与 V3 运营网关均已发布,线上代码与本地完整网关代码一致,保留已上线的教学流程模块。两条真实网关均回读上述金额。

业务列表实际返回:课程绑定 1,537 条、预约 31,586 条、上课记录 19,409 条、每日学习 19,640 条。线上分别核验了第 251 页、较早业务编号搜索、按学员过滤,以及超出末页时仍保留完整总数。课程绑定核验第 2 页。12 个相关业务查询均成功返回。

验证与证据

  • Node 测试覆盖工资事务、复习奖励、导入任务在新系统完成、重复确认、历史同步零元、完整来源分页、搜索转义及帐套隔离。
  • 管理端 39 项相关测试通过,管理端构建成功,11 个云函数定义校验通过。
  • 生产事务回滚测试:旧待办首次在新系统完成计 1 元,重复完成仍为 1 元;直接同步旧完成记录为历史零元;事务上下文恢复,测试记录回读为零。
  • 1,267 条历史确认完成;再次确认其中 100 条返回新增 0、已确认 100,没有新增金额。
  • 数据库修复仅安装 5 个受影响函数;安装前后的线上定义备份保存在私有目录。临时执行函数均删除并回读确认,无新建测试账号。
  • 私有明细、原始证据、版本指纹和回读报告位于本机 /Users/mac/.local/state/xiaoshu/payroll-repair/2026-10-12/,不提交用户资料、会话或密钥。
  • 本地管理端运行于 http://127.0.0.1:4300/;浏览器访问进入正常登录页。本轮没有管理员浏览器会话,因此已登录工资界面的视觉验收不作已完成声明;生产金额通过真实管理员 API 验证。

仍需核对的业务事实

抗遗忘工资页另保留 44 条真实来源异常:43 条涉及重复计划任务,1 条缺少有效来源学习记录或计划日期。43 条按学员、学习记录和计划日期归为 23 组;旧系统完成记录中同组存在重复来源,不能直接按每个重复行补发。这些异常凭据保留零元,未删除、合并或转成有效工资。它们与原先 47 条课酬分类异常分别统计。

手动同步收据的真实完成时间为北京时间 2026-10-12 16:39:11。保留的新旧差异、工资截止范围及每天 23 点自动同步尚未完成验收,所以 settlementReady 仍为 false。本次修复完成计薪预览和凭据确认,不代表已经完成工资结算、支付或夜间任务上线。

窄范围数据库发布入口

已有有效超级管理员会话时,从受限环境加载凭据并指定私有备份目录后运行:

node scripts/migrate-payroll-repair.mjs          # 备份并核查现有定义
node scripts/migrate-payroll-repair.mjs --apply  # 事务安装受影响函数

入口要求 XIAOSHU_MASTER_KEY 和 XIAOSHU_PAYROLL_REPORT_DIR,不得把主密钥放进命令行、仓库或报告。它不会执行全量奖励回填、改写历史工资或创建用户。