# Phase 5 Summary: 数据管道优化

**Status:** Complete ✅
**Tests:** 112 passed (6 new)
**Commit:** 3d202c3

## Plan 01 — DATA-01: dedup 30天窗口（`dedup.py`）

**修复前：** 查全量历史数据去重，同一职位 ID 永久只入库一次

**修复后：**
```sql
-- 单字段（boss job_id 等）
SELECT job_id FROM boss_job
WHERE job_id IN {keys} AND created_at > now() - INTERVAL 30 DAY

-- 双字段（qcwy job_id + update_date_time）
SELECT job_id, update_date_time FROM qcwy_job
WHERE job_id IN {keys} AND created_at > now() - INTERVAL 30 DAY
```

**新增测试（`tests/ingest/test_dedup.py`，6 个）：**
- 30 天内有记录 → 过滤（1 个验证 SQL 窗口）
- 无记录 → 允许入库
- 空输入 → 不查 ClickHouse
- build_insert_row 含 channel 字段

---

## Plan 02 — DATA-04: company_job channel 区分

**目的：** 区分`搜索职位（channel=mini）`和`公司关联职位（channel=company）`

| 文件 | 变更 |
|------|------|
| `schemas/ingest.py` | `ChannelType.COMPANY = "company"` |
| `configs/boss.py` | 新注册 `channel=company, data_type=job` |
| `configs/qcwy.py` | 同上 |
| `configs/zhilian.py` | 同上 |
| `company_jobs_sync.py` | `"mini"` → `"company"` |

---

## DATA-02 + DATA-03 确认（无需改动）

- **DATA-02：** `job.py` 已有 `/data/batch-async` 端点，spiderJobs 直接调用即可 ✅
- **DATA-03：** `company_cleaner.py` 已完整实现 ClickHouse→爬详情→MySQL 全链路 ✅
