# baoyu-visitor-prep — data pipeline

### 数据特征

飞书活动导出为单Sheet xlsx，典型规模20K-50K行，列结构：

| 列 | 字段 | 用途 |
|----|------|------|
| 0 | 跟进部门 | 按部门筛选（北区/南区/拓展部等） |
| 1 | 活动关联客户 | 客户名称（搜索目标公司） |
| 2 | 活动关联客户(ID) | 飞书客户ID |
| 3 | 客户-所属人 | 负责销售 |
| 4 | 创建时间 | 活动日期 |
| 5 | 活动对应商机 | 关联商机名称 |
| 6 | 活动对应商机(ID) | 商机ID |
| 7 | 活动描述 | **核心情报**（拜访纪要/技术细节/价格沟通） |
| 8 | 名称 | 活动标题 |
| 9 | 活动类型 | 线上跟进/线下拜访/陌拜 |
| 10 | 活动链接 | 飞书项目链接 |


### 快速聚合示例
```python
from collections import defaultdict
total_sales = defaultdict(float)
for cells in erp_matches:
    if cells[13] != '是':  # 排除赠品
        try:
            amt = float(cells[3])
            pn = cells[19] if cells[19] else cells[7]
            if amt > 0:
                total_sales[pn] += amt
        except:
            pass
# print(f"Total: ¥{sum(total_sales.values()):,.0f}")
```

## 客户档案JSON体系（跨会话持久化）

每次完成企业型访前背调或产品管线分析后，**必须**创建/更新客户档案JSON：


### 记忆同步
- 档案中的核心信息（公司名/等级/赛道/主采产品/销售员/关键机会）同步写入Hermes持久记忆
- 格式：`[公司简称]([城市],[赛道],[等级],[销售员]):[关键事实];机会:[产品推荐]。`
- 记忆空间有限（2200字符），仅保存最核心的客户摘要，完整数据在JSON中

## 通用注意事项
- **网络搜索回退**：当浏览器搜索（Google/Bing/Baidu）遭遇 CAPTCHA 拦截时，优先用 `session_search` 查找前次会话中的客户情报，详见 `references/web-search-fallback.md`
- **销售培训资料格式**：当用户要求生成 LTC/铁三角等销售方法论的培训材料时，用 HTML 幻灯片格式（深色主题、理论+案例+行动清单），详见 `references/sales-training-deck-format.md`
- 优先从官方域名提取资料，而非第三方聚合站
- 如搜索无官方个人页，从学术会议报告、学会活动报道中提取片段
- 产品推荐要具体到个人/项目，而非笼统列表
- HTML/Word生成用系统 `python3`（sandbox Python 可能缺库）
- 飞书活动数据是内部分析的第一优先级来源——比公开搜索更精准、更实时
- ERP订单数据作为客户分级的硬依据：CRM记录+ERP订单=完整的采购/测评时间线
- **XLSX Sheet定位**：飞书CRM导出99%在 `xl/worksheets/sheet2.xml`，ERP在 `sheet1.xml`。首选 `zf.namelist()` 确认文件名后直接读取——跳过 `workbook.xml` + `rels` 联动解析，避免 `officeDocument` vs `package` 命名空间兼容性问题。

## 多版本合并工作流（新增）

访前报告常经历多轮迭代：

1. **初版**（Agent生成）：基于公开信息+IM知识库+本地文件搜索
2. **运营版**（用户补充）：用户在本地补入已有项目管线、物料编号、报价、内部信息
3. **脱敏版**（用于分享）：用户将敏感数据（价格/规模预测）模糊化后导出PDF
4. **合并版**（Agent最终）：以PDF脱敏版为准，再将初版的公开信息（市场背景/技术补充）合并回去

**合并时注意：**
- 用 `pymupdf (fitz)` 提取PDF文本，识别用户的编辑意图
- PDF中价格→"面议"/模糊化的，HTML同步脱敏
- PDF中"CRM"→"飞书"等内部术语，按PDF为准
- PDF中新增的信息（如师门、剑桥履历），保留并补充到HTML
- 合并后台词更新（"机密·内部参考" → "内部参考·团队共享版本"）

## 脱敏分享规范

用户需要将报告分享给团队时，常见脱敏操作：
- 价格数字 → "面议"
- 年收入预测 → "根据模型测算"
- 客户来源的具体数量 → 模糊区间（"3千万～1亿头份"）+ 标注"非客户来源信息"
- 内部系统名称统一为"飞书"（非CRM）
- 页脚加注"可安全分享"声明

## 证据可靠性分级（⚠️ 避免推测当事实）

报告中涉及第三方机构的能力/需求判断时，必须标注可靠性：

| 标记 | 含义 | 示例 |
|------|------|------|
| 🟢 **确定** | 有公开证据（官网/年报/新闻/临床批件） | "金宇已建成全球首个动物mRNA疫苗车间（2025农业农村部验收）" |
| 🟡 **推测** | 逻辑合理但无公开证据 | "郑海学团队在新型疫苗技术上有深厚积累（基于其研究方向推断）" |
| 🔵 **待确认** | 需当面验证 | "中农威特 mRNA 管线暂无公开证据——明天当面确认" |

**规则：**
- 供应链需要推断（如"客户需要Taq酶"）标记🟡
- 技术平台反推原料清单标记🟡
- 标杆客户来自新闻的标记🟢
- 竞争对手对标来自公开信息的标记🟢
- **绝对不要将🟡标为🟢。被客户质疑一条数据的可靠性，整个报告的可信度都会受损。**

## 用户追问验证工作流

用户指出报告中的某条信息可能不准确时：

1. **立刻深度搜索**：针对被质疑的具体信息，做3个以上独立来源的交叉搜索
2. **分层修正**：将原报告中的推测分层——确定的部分保留+强化引用来源，不确定的降级或删除
3. **更新报告**：同步修改报告中所有涉及该信息的位置（主文+速查卡+话术），确保一致性
4. **标注更新**：在页脚注明xx时间"深度调研更新"，增加可信度

## 附录：信息来源（必加）
- 文档末尾标注检索来源URL
- 底部注明检索时间
- 来源类型包括但不限于：官网、学术会议记录、新闻稿、企查查/天眼查等
- 如有钉钉接待申请PDF或公司来访接待规范PDF，使用 `pymupdf (fitz)` 提取关键数据并嵌入报告

## ⚠️ 新增Pitfall：file:// 协议下的Fetch/CORS

当页面从 `file://` 打开时，`fetch()` 相对路径请求被浏览器 CORS 策略阻止。两个标准修复：
1. **全局 `httpBase` 变量**：`location.protocol==='file:'?'http://127.0.0.1:8765':''`，所有 fetch 拼接此前缀
2. **数据直接内嵌**：大型客户清单等不依赖网络请求，直接写入 HTML

详见 `baoyu-visit-card` 技能的 `file-detection-mechanism.md`。

## ⚠️ 新增Pitfall：文件检测——猜测路径 vs 文件清单

`custShort` 算法无法精确匹配实际文件名。访前准备中心使用文件清单（`file_manifest.json`）+ 模糊匹配替代 HEAD 请求猜测路径。每次生成文件后需执行 `regenerate_manifest.sh` 更新清单。

---

## 工作流（产品管线匹配模式 — 新增）

适用场景：用户已完成客户基础调研（有客户档案JSON/ERP数据/CRM情报），要求进一步深挖——"这个客户接下来会开发什么产品？宝锐应该匹配哪些原料？"


### Step 4: 市场数据验证

- 用行业报告数据验证每个产品方向的战略价值
- 标注数据来源（报告名称+年份+URL）
- 如果某个方向缺乏市场数据，标注"[信息缺口]"
