# 录音每日统计接入

> 2026-10-15 更新：下文是原主档指标的历史实施记录；现界面改用上传账号范围的主档 + 播放切片 `storage`。最新口径和历史缺失处理见 [后端交接](录音存储与历史转写计量后端交接-20261015.md)，旧归属/主档口径不再作为当前界面指标。

## 后端核对

- `jotmo-audio` 的 `origin/master` 提交 `39b707b0a7d554bd93029146dfc815e9b578db9f` 已补齐 `archive_size` 响应字段。
- `one-day-trans`、`one-day-trans-v2`、`get-child-by-ids` 均直接映射 child 的 `ArchiveSize`，响应没有 `omitempty`。
- 2026-10-08 与全天录音开发分支整合后，插件通过现有 `recordings/query` / `recordings/transcript/query` 分页读取。Audio 从既有 Child 事实投影 `storage`，不恢复 `one-day-trans` 全量正文，不新增集合、索引、持久化统计或配置。
- 首屏正文与播放不等待统计。界面独立、可取消地顺序读取剩余页，按同一 viewRef 累加字数，只保留一页正文和各说话人的计数。跨页句子按原始码点偏移校验，存储合计不重复累计。统计确实需要读完全天文字，成本随正文量增长；此次没有新增预计算表或将这项成本伪装成常数。
- 源码存在不等于生产已部署；下方验证记录区分本地测试和真实接口结果。

## 展示和口径

1. 时间轴下增加紧凑的「人声存储 · 转写字数」一行，不增加独立大卡片。
2. 原有全天说话人展开面板，在时长、片段数之后显示每人转写字数；沿用最终身份合并，不按原始 A/B/C 分拆已标记的人。
3. 总字数使用当天最终去重转写，与页面可读文字一致；去除 Unicode 空白后按 Unicode 码点计数。标点计数，自动生成的说话人标签不计数。背景文本计入总字数，但不归入任何说话人的字数。
4. 存储范围沿用录音覆盖轨的明确归属：仅 `belong_usr` 为当前用户的物理 child。新主播放包按已接受资产 size 合计，替代历史 VAD 主档；仅增加 supplemental 包的历史录音则合计主档和补充包。数据来自数据库唯一 child 及现有资产事实，绝不使用 `source_size` 或 Child 的通用 `size` 兜底。
5. `has_asr=false` 为处理中；已完成且大小为 0、无有效文字，是合法静音。大小为 0 但有文字、字段缺失、异常数值等显示不可确认。部分可确认时显示已确认合计，并保留状态提示。
6. 切日期、账号、读取版本或关闭页面时取消统计，丢弃迟到结果；失败时不显示伪造的 0 或部分字数。统计不写回正文 owner。处理中沿用录音页现有后台刷新。

## 跨日边界

- 跨午夜 session 保留完整映射；落在当天的物理 child 可以正常计算大小。
- 单个物理 child 自身跨过午夜时，接口没有提供按天分配的 VAD 主档字节数。该 child 标记为大小不可确认，不按时长估算，也不在两天重复累计。
- 数值超出 JavaScript 安全整数范围时不作精确总量展示。

## 2026-10-01 基线验证记录

以下是原基线的验证证据，不代表 2026-10-08 整合后的远端部署或浏览器验收。最新 rebase 的结果见对应 Meta 交付记录。

### 验证范围

- 纯统计回归：非零主档、静音、历史缺失、处理中、部分完成、非法数值、大整数、重复 child、Unicode、跨日、归属与上传人区分。
- 服务回归：`recordingDay` 返回统计，同时保留原请求数量；不把原始 child/session 身份透传给界面。
- 界面回归：紧凑统计、缺失与处理中状态、中英文、已标记身份合并后的字数、背景文本不归入说话人。
- 全量独立构建验证（排除未纳入本轮的通道开发）：849 个测试文件通过、11 个跳过；10,028 项测试通过、15 项跳过。类型构建、打包通过。
- 3100 真实账号只读验证：有录音的历史日期成功返回非零已确认字节数，总字数与所有最终转写条目重新计数一致；空日期返回 0。生产读取链路已具备 `archive_size` 能力，个别无法确认的数据保留部分完成提示。
- 浏览器验证：总量行、说话人展开字数、空日与切日加载占位，以及 760px 窄窗口换行。测试后恢复原窗口尺寸。
- 未执行录音上传、删除、重新转写或生产数据修改；仅更新 3100 独立预览，保留已安装桌面端。
