本次代码只在三类旧系统数据(预约 54、上课 59、抗遗忘 60)均已完成全量、增量水位追平、旧库与新库有效业务 ID 集合的 SHA-256 一致、最近成功同步不超过 120 秒且无待处理失败或冲突时,允许生成、刷新或审核工资草稿。页面上的「查询于」不是旧库同步时间。
legacy-sync-bridge/database/install.sql 和 verify-readonly.sql,确认 12 个变更触发器、增量日志和 WritesFailClosed=1。部署只读 IIS 桥;按 legacy-sync-bridge/README.md 的预检、安装和签名测试完成 /xiaoshu-sync/v1/health、manifest、changes 验证。当前线上健康地址返回 404,在解决前不得放开结算。XIAOSHU_LEGACY_SYNC_BASE_URL(IIS 应用根路径,不含 /v1)、XIAOSHU_LEGACY_SYNC_KEY_ID、XIAOSHU_LEGACY_SYNC_SECRET;不启用旧系统写入开关。先执行复习奖励迁移,再执行工资完整性迁移,最后发布网关与管理后台。所有密钥仅放服务端安全配置。appointments、lessons、memory-records 分别执行全量补同步(full=true),直到每个数据集 hasMore=false;依次处理失败队列和冲突。核对三组业务 GeneralID 数量、SHA-256、增量水位,并抽查 9 月跨月、作废、重复课次和旧复习完成记录。scripts/run-legacy-sync-worker.mjs(默认 5 秒)。运行器会先追平学习记录再处理抗遗忘、先追平预约再处理上课,避免缺少来源时生成不可计薪的异常凭据。仅当三组 checkpoint 均为 healthy、worker 健康检查为 200 且工资接口 sourceStatus.sync.settlementReady=true 时,按老师逐条对照旧系统 9 月完课与工资明细。若数据继续变化,重复对账。catching_up 视作追平。npm run test:payroll-integrity、npm run test:review-rewards、npm run cloud:validate 和 npm run build:admin。旧 IIS/SQL Server 部署权限、云函数配置权限与 9 月旧库对账数据均是正式验收的必要条件。