# 变更审计记录：lookback_days 从 60 天扩大到 90 天

| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-24 10:28:13 |
| Prompt-ID | P20260324-102813 |
| Session-ID | 8d0daac8 |
| Session 路径 | docs/audit/session_logs/2026-03/24/36_e6cfbf4c_085324 |

## 操作摘要

将关系指数（RS/MS/ML）及全局 INDEX 层的 `lookback_days` 默认值从 60 天扩大到 90 天。原因：助教小燕历史服务过的客户中有 3 个（梅、蔡总、罗先生）因超出 60 天回溯窗口不在关系指数表中，扩大到 90 天覆盖更多有效关系对。

## 变更原因

调查发现助教小燕历史服务过 6 个客户，但其中 3 个因超出 60 天回溯窗口而不在关系指数表中。扩大到 90 天可覆盖更多有效关系对，减少因窗口过窄导致的客户丢失。

## 影响范围

### 数据库（ETL 库 `dws.cfg_index_parameters`）
- RS `lookback_days`: 60 → 90
- MS `lookback_days`: 60 → 90
- ML `lookback_days`: 60 → 90

### 代码变更
| 文件 | 变更内容 |
|------|----------|
| `apps/etl/connectors/feiqiu/tasks/dws/index/relation_index_task.py` | `DEFAULT_PARAMS_RS/MS/ML["lookback_days"]` 60→90；`.get()` fallback 60→90 |
| `apps/etl/connectors/feiqiu/tasks/dws/index/base_index_task.py` | `DEFAULT_LOOKBACK_DAYS` 60→90 |
| `apps/etl/connectors/feiqiu/tasks/verification/index_verifier.py` | 默认参数 `lookback_days=60` → 90 |
| `apps/etl/connectors/feiqiu/orchestration/flow_runner.py` | verifier fallback 60→90 |
| `apps/etl/connectors/feiqiu/config/defaults.py` | `index_lookback_days` 60→90 |
| `apps/etl/connectors/feiqiu/.env` | `INDEX_LOOKBACK_DAYS=60` → 90 |
| `.env.template` | `INDEX_LOOKBACK_DAYS=60` → 90 |

### 文档变更
| 文件 | 变更内容 |
|------|----------|
| `apps/etl/connectors/feiqiu/docs/etl_tasks/index_tasks.md` | RS/MS/ML 参数清单 lookback_days 60→90 |
| `apps/etl/connectors/feiqiu/docs/business-rules/index_algorithm_cn.md` | 默认天数描述 60→90 |
| `docs/architecture/etl-feiqiu-architecture.md` | RS lookback_days 60→90 |

### 未变更（不在范围内）
- WBI/NCI 的 `lookback_days_recency=60`：会员活跃判定窗口（NEW/OLD/STOP 分群），与 RS/MS/ML 的服务回溯窗口是不同概念
- `member_index_base.py` 的 `DEFAULT_RECENCY_LOOKBACK_DAYS=60`：同上
- DDL 基线 `docs/database/ddl/etl_feiqiu__dws.sql`：种子数据中的旧值保留作为历史记录，实际值由数据库 UPDATE 覆盖
- PRD 文档 `关系指数PRD.txt`：原始需求文档，保留历史原貌

## 本次对话文件变更

### 新增文件
- `docs/audit/prompt_logs/prompt_log_20260324_102813.md`
- `docs/audit/session_logs/2026-03/24/36_e6cfbf4c_085324/main_01_8d0daac8.md`

### 删除文件
- `docs/audit/session_logs/2026-03/24/36_e6cfbf4c_085324/main_01_fd2ad307.md`（被 8d0daac8 supersede）

## 改动注解

### `apps/etl/connectors/feiqiu/tasks/dws/index/relation_index_task.py`
- 变更类型：修改
- 原始原因：RS/MS/ML 三个指数的默认回溯窗口 60 天不足以覆盖部分低频但有效的客户关系对
- 思路分析：`DEFAULT_PARAMS_RS`/`DEFAULT_PARAMS_MS`/`DEFAULT_PARAMS_ML` 三个字典中的 `lookback_days` 从 60 改为 90；`execute()` 方法中 `.get("lookback_days", ...)` 的 fallback 值同步从 60 改为 90，确保即使配置表未加载也使用新默认值
- 修改结果：RS/MS/ML 计算时回溯 90 天的服务记录和充值记录，覆盖更多有效关系对

### `apps/etl/connectors/feiqiu/tasks/dws/index/base_index_task.py`
- 变更类型：修改
- 原始原因：基类常量 `DEFAULT_LOOKBACK_DAYS` 作为所有指数任务的全局默认值，需与子类保持一致
- 思路分析：单行常量修改 `DEFAULT_LOOKBACK_DAYS = 60` → `90`
- 修改结果：所有继承 `BaseIndexTask` 的指数任务默认回溯天数统一为 90

### `apps/etl/connectors/feiqiu/tasks/verification/index_verifier.py`
- 变更类型：修改
- 原始原因：校验器的 `lookback_days` 默认值需与计算任务一致，否则校验窗口与计算窗口不匹配
- 思路分析：`__init__` 参数 `lookback_days: int = 60` → `90`
- 修改结果：INDEX 层覆盖率校验和补齐操作使用 90 天窗口

### `apps/etl/connectors/feiqiu/orchestration/flow_runner.py`
- 变更类型：修改
- 原始原因：编排层创建 verifier 时的 fallback 值需同步
- 思路分析：`flow_runner.py` 中构造 `IndexVerifier` 时的 fallback `60` → `90`
- 修改结果：编排层与校验器默认值一致

### `apps/etl/connectors/feiqiu/config/defaults.py`
- 变更类型：修改
- 原始原因：配置默认值字典是所有配置的最终 fallback 层
- 思路分析：`DEFAULTS["run"]["index_lookback_days"]` 从 60 改为 90
- 修改结果：即使 `.env` 和环境变量均未设置，配置系统也返回 90

### `apps/etl/connectors/feiqiu/.env`
- 变更类型：修改
- 原始原因：ETL 模块本地环境变量需同步
- 思路分析：`INDEX_LOOKBACK_DAYS=60` → `90`
- 修改结果：ETL 模块运行时环境变量为 90

### `.env.template`
- 变更类型：修改
- 原始原因：模板文件是新环境部署的参考，需反映当前默认值
- 思路分析：`INDEX_LOOKBACK_DAYS=60` → `90`
- 修改结果：新部署环境默认使用 90 天窗口

### `apps/etl/connectors/feiqiu/docs/etl_tasks/index_tasks.md`
- 变更类型：修改（文档同步）
- 修改结果：RS/MS/ML 参数清单中 lookback_days 描述更新为 90

### `apps/etl/connectors/feiqiu/docs/business-rules/index_algorithm_cn.md`
- 变更类型：修改（文档同步）
- 修改结果：算法说明文档中默认天数描述更新为 90

### `docs/architecture/etl-feiqiu-architecture.md`
- 变更类型：修改（文档同步）
- 修改结果：架构文档中 RS lookback_days 描述更新为 90

## 回滚方式

```sql
UPDATE dws.cfg_index_parameters
SET param_value = 60
WHERE index_type IN ('RS', 'MS', 'ML')
  AND param_name = 'lookback_days';
```

代码侧将所有 90 改回 60 即可。

## 验证 SQL

```sql
SELECT index_type, param_name, param_value
FROM dws.cfg_index_parameters
WHERE param_name = 'lookback_days'
  AND index_type IN ('RS', 'MS', 'ML');
-- 预期：三行均为 90.000000
```
