docs(management): 批次A终评修正——部署顺序理由/data_complete语义/通话类型注释

终评 Approve 后三处文档级修正:
- CLI help与DEPLOY的顺序理由改为事实(宽表不读fact,先跑不会出0;
  顺序约定保留,fact是批次B评分/下钻数据源)
- data_complete 注释改为预留语义待批次B定义(当前恒True)
- EmployeeCallDaily 注释通话类型实测值(voice_call/wa_voice_call)
This commit is contained in:
浅念
2026-09-09 16:30:05 +08:00
parent 639edf56a6
commit 7758a3351f
3 changed files with 12 additions and 7 deletions
+3 -2
View File
@@ -249,8 +249,9 @@ sudo docker compose -f docker-compose.server.yml exec backend python -m app.sync
- `first-reply-facts`:跨日精确首响事实表(本地实测 11,020 会话 → 6.8 万行)。 - `first-reply-facts`:跨日精确首响事实表(本地实测 11,020 会话 → 6.8 万行)。
- `employee-metrics`:员工指标宽表 + 通话日小表(本地实测 12,371 宽表行 + - `employee-metrics`:员工指标宽表 + 通话日小表(本地实测 12,371 宽表行 +
1,163 通话行);**必须在 first-reply-facts 之后跑**——宽表串类列 1,163 通话行);**必须在 first-reply-facts 之后跑**——fact 表是后续评分/
(threads_answered/首响分位)与 fact 表同源,先跑宽表会整体为 0。 下钻的数据源,须先填充(宽表自身从 message 表经同一算法重算串类列,
不读 fact 表,先跑宽表不会出 0,但 fact 缺失会阻塞后续能力)。
- 两命令均为按日 delete+insert 幂等重建,复跑结果一致,中断重跑无副作用。 - 两命令均为按日 delete+insert 幂等重建,复跑结果一致,中断重跑无副作用。
## 8. 本地收尾(部署验证通过后) ## 8. 本地收尾(部署验证通过后)
+5 -3
View File
@@ -1090,7 +1090,8 @@ class EmployeeMetricDaily(Base):
reactivated_customer_count: Mapped[int] = mapped_column( reactivated_customer_count: Mapped[int] = mapped_column(
Integer, nullable=False, default=0, server_default=sa.text("0") Integer, nullable=False, default=0, server_default=sa.text("0")
) )
# fact 是否已覆盖当日(宽表生成前置条件;False=串类列可能滞后) # 预留完整性标记:宽表生成当前恒写 True(串类列与 fact 同一算法直算,
# 不读 fact 表)——真实语义(如校验 fact 覆盖/同步完整)由批次B定义
data_complete: Mapped[bool] = mapped_column( data_complete: Mapped[bool] = mapped_column(
Boolean, nullable=False, default=False, server_default=sa.text("0") Boolean, nullable=False, default=False, server_default=sa.text("0")
) )
@@ -1102,8 +1103,9 @@ class EmployeeMetricDaily(Base):
class EmployeeCallDaily(Base): class EmployeeCallDaily(Base):
"""员工×日通话小表(v2 §1.2 #9)——通话无消息渠道维度,独立于宽表。 """员工×日通话小表(v2 §1.2 #9)——通话无消息渠道维度,独立于宽表。
phone_call.channel 是通话类型(phone_call/voice_call)非消息渠道, phone_call.channel 是通话类型(实测值 voice_call/wa_voice_call,
塞进 (day,channel,user) 宽表会在 channel=all 聚合时双计。接通 = 无蜂窝 phone_call 行)非消息渠道,塞进 (day,channel,user) 宽表会在
channel=all 聚合时双计。接通 =
call_duration > 0;followup = 通话后 24h 内该员工任一账号对该客户 call_duration > 0;followup = 通话后 24h 内该员工任一账号对该客户
有消息(Task 0 已核实:1:1 通话可匹配率 100%,@chatroom 群通话除外)。 有消息(Task 0 已核实:1:1 通话可匹配率 100%,@chatroom 群通话除外)。
""" """
+4 -2
View File
@@ -157,8 +157,10 @@ def _build_parser() -> argparse.ArgumentParser:
description=( description=(
"Full rebuild of the management wide table (per-day x channel " "Full rebuild of the management wide table (per-day x channel "
"x staff, 1:1 caliber) and the call daily table. Must run " "x staff, 1:1 caliber) and the call daily table. Must run "
"AFTER first-reply-facts (thread columns share the same " "AFTER first-reply-facts (the fact table feeds Batch-B "
"source). Deploy backfill + nightly self-heal. Idempotent." "scoring and drilldown; both recompute threads from messages "
"via one shared algorithm). Deploy backfill + nightly "
"self-heal. Idempotent."
), ),
) )