Explorar o código

docs: finalize credit reconciliation acceptance and regression results

彭峰 hai 8 horas
pai
achega
08646ba69b

+ 5 - 3
docs/operations/legacy-credit-balance-reconciliation-2026-11-07.md

@@ -10,6 +10,8 @@
 
 不能直接拿旧余额覆盖新余额,否则会丢失新系统的充值、退款、完课扣减和调整。
 
+樊文昊的核算:35 次正式课充值 − 旧系统实际扣除 33 次 − 新系统实际扣除 2 次 = 0。体验课单列,不占用这 35 次正式课。
+
 ## 修复规则
 
 - 分别保存旧系统来源余额、新系统本地流水及对账状态;首次修复必须有完整来源凭据、导入时间附近的可核对起点及连续的后续变动依据。
@@ -26,15 +28,15 @@
 - 扫描 750 个旧系统身份及 551 个历史学员,共 2,204 个课时账户,读取 42,726 条课时流水。初步识别 111 位学员、230 个账户存在差额。
 - 同时识别 3 位学员、4 个预约存在新旧两端扣课凭据(含对应陪练时长);按同一预约计费一次合并。
 - 34 项相关测试通过,覆盖真实 PostgreSQL 事务、重跑幂等、原始流水保留、充值退款、负数与半小时、来源缺页、余额并发变化保护及重复扣课。
-- 11 个云函数定义校验通过。全量服务端执行 438 项:431 通过、7 失败。其中 `lesson-course-selection.test.mjs` 的两项失败在独立 `HEAD` 基线副本同样复现(测试夹具缺少 `sourceKey` 及后续课程状态错误);未跟踪的 `legacy-enrollment-reconciliation.test.mjs` 另有五项失败,其对应迁移文件尚不存在。本次未改动或提交这些文件,不宣称全量通过。
+- 11 个云函数定义校验通过。最终全量服务端 **439 项通过、0 失败**。首轮全量诊断曾有 7 项失败:`lesson-course-selection.test.mjs` 的两项在独立基线副本同样复现(夹具缺少 `sourceKey` 及后续课程状态错误),当时未跟踪的 `legacy-enrollment-reconciliation.test.mjs` 另有五项失败。独立提交 `790ca78` 随后补齐了这些迁移与夹具;在包含该提交与本次修复的最终分支上重新执行全量,全部通过。本次提交未夹带这些文件。
 - 正式数据库先进行事务回滚演练,再执行有审计的修复;原始来源用户余额在执行前重新读取,750 个身份余额与审计快照一致。
 - 樊文昊已修正 60 分钟课时和陪练时长各 19→0;正式 `app_credit_overview` 接口回读全部账户余额、预留和可用量均为 0。
 
 ## 发布与证据
 
-后端选择性更新 `xiaoshu.sync.direct-v1` 的 `directSupplement`、`directControl`,新增余额计划与对账函数。其他线上函数逐项保留,源码哈希回读一致。未发布前端资源。
+代码修复提交 `b4a428b` 已推送 `origin/main`。后端选择性更新 `xiaoshu.sync.direct-v1` 的 `directSupplement`、`directControl`,新增余额计划与对账函数。其他线上函数逐项保留,源码哈希回读一致。未发布前端资源。
 
-专用修复批次:`credit-repair-20261107-v1`。私有备份、来源、计划、回滚演练及逐批回执:`~/.local/state/xiaoshu/cloud-releases/2026-11-06-credit-reconciliation/`。
+专用修复批次:`credit-repair-20261107-v1`。修复总审计已写入 `SysLog`,来源键为本批次编号,记录执行者、代码提交和修正数量。私有备份、来源、计划、回滚演练及逐批回执:`~/.local/state/xiaoshu/cloud-releases/2026-11-06-credit-reconciliation/`。
 
 批量最终复核:551 位学员、2,204 个账户均符合逐笔计算的余额,修正 111 位学员、230 个账户,未决差额和对账冲突均为 0。42,726 条原始流水逐字段比较一致,樊文昊 36 条训练记录逐字段比较一致。3 位学员的 4 个跨系统重复预约均按一次扣课核算,原有两条训练记录和原始扣课凭据保留。