# 活动增量入档 · 字段标签规范

版本：V01（2026-10-31）
适用范围：销售每日活动 → 项目档案字段增量更新
对应 Demo：`工具/活动增量入档_Demo_20261031_V01.html`

---

## 1. 设计原则

1. **项目档案与活动流水分开**
   - 项目档案：客户、商机、产品、参数基线、决策链等慢变信息，建档后长期复用。
   - 活动流水：每天发生的拜访、测试、反馈、发货、客诉、下一步，只写当天增量。
2. **销售只写“今天发生了什么”**
   - 不要求每条活动重写客户、商机、全部项目维度。
   - 不要求按固定模板填满所有段落。
3. **系统只更新“被提到的字段”**
   - 未提到的字段保持原值，不用空值覆盖。
   - 同一条活动可以命中多个字段，每个字段独立判断。
4. **旧值先备份，新值带时间戳**
   - 每次更新写一条变更记录：字段、旧值、新值、来源活动、操作人、时间。
   - 字段卡展示最近更新时间；历史表保留完整变化链。
5. **可确认、可撤销、可追溯**
   - 系统先给出“待确认”的旧值→新值，销售确认后入档。
   - 支持撤销本次入档；单字段可查看历次变化。

---

## 2. 三层数据结构

### 2.1 项目档案（Project Profile）

```json
{
  "customer": "圣湘生物科技股份有限公司",
  "opportunity": "多重呼吸道病原体冻干体系开发",
  "fields": {
    "customer_need": {
      "value": "冻干后 37℃ 加速 7 天 Ct 漂移≤1；兼容一步法 RT-qPCR",
      "updated_at": "2026-10-08 14:20",
      "source_activity_id": "ACT-20261008-001"
    }
  }
}
```

字段值只保留“当前有效值”，历史在变更记录中。

### 2.2 活动流水（Activity Event）

```json
{
  "activity_id": "ACT-20261031-016",
  "date": "2026-10-31",
  "sales": "赵云浩",
  "customer": "圣湘生物科技股份有限公司",
  "opportunity": "多重呼吸道病原体冻干体系开发",
  "raw_text": "今天给圣湘张工送了 C 组 3 批……",
  "tags": ["客户反馈", "技术参数", "竞品", "下一步", "订单样品"],
  "field_updates": ["customer_feedback", "tech_params", "competitor", "next_action", "order_status"],
  "created_at": "2026-10-31 16:45"
}
```

`raw_text` 是销售原话，不丢；结构化结果附在旁边。

### 2.3 字段变更记录（Field History，旧值备份）

```json
{
  "id": "H-20261031-001",
  "ts": "2026-10-31 16:45",
  "field": "customer_feedback",
  "old_value": "客户认可 A/B 组，要求 C 组补做 1 批",
  "new_value": "客户反馈 A/B 组没问题，要求 C 组 7 天 Ct 漂移≤1.0，并补批间差数据",
  "source_activity_id": "ACT-20261031-016",
  "operator": "赵云浩",
  "status": "已入档",
  "old_updated_at": "2026-10-08 14:20",
  "old_source_activity_id": "ACT-20261008-001"
}
```

撤销时恢复 `old_value`、`old_updated_at`、`old_source_activity_id`，并把状态改为“已撤销”。

---

## 3. 字段字典

| 字段 key | 页面名称 | 写什么 | 不写什么 |
|---|---|---|---|
| `customer_need` | 客户需求 / 应用场景 | 应用场景、技术平台、项目阶段、客户明确要求 | 日常寒暄、无信息量的“聊得很好” |
| `tech_params` | 技术参数 / 指标基线 | 货号、浓度、温度、时间、CV、Ct、回收率、检测限、酶活 | 未量化的“效果不错” |
| `last_test_result` | 最近测试结果 | 已发生的逐项指标 → 实测值 → 判定 | 计划、目标、要求值（除非明确是实测） |
| `open_issue` | 当前问题 / 卡点 | 超阈、异常、客诉、析晶、污染、降解、失败 | 已闭环的旧问题（应写“已解决”或更新为空） |
| `customer_feedback` | 客户反馈 | 认可、要求、原话、满意/不满意、接受/拒绝 | 销售自己的判断 |
| `competitor` | 竞品信息 | 品牌、型号、条件、量化差距、报价 | 无来源的“听说” |
| `next_action` | 下一步动作 | 做什么、谁负责、什么时间 | 已完成动作（应进活动流水） |
| `order_status` | 订单 / 样品 / 发货 | 订单号、测试单号、送样、发货、补寄、合同 | 纯意向、未发生的“可能会下单” |
| `decision_chain` | 决策链 / 关键人 | 决策人、影响人、使用人、采购、PI、课题组 | 普通联系人寒暄 |
| `risk_note` | 风险 / 商务卡点 | 预算、延迟、暂停、停滞、可能推迟、竞争风险 | 已解决的历史风险 |

---

## 4. 标签 → 字段映射

| 标签 | 命中信号（示例） | 更新字段 |
|---|---|---|
| 客户需求 | 需求、要求、应用场景、技术平台、项目阶段、立项、注册、量产 | `customer_need` |
| 技术参数 | 参数、指标、浓度、温度、时间、CV、Ct、回收率、检测限、酶活、批内、批间、≤、≥ | `tech_params` |
| 测试结果 | 实测、测得、→、通过、超阈、失败 + 指标/数值 | `last_test_result` |
| 问题卡点 | 问题、异常、超阈、抬不起来、析晶、客诉、偏差、污染、降解、沉淀、失败 | `open_issue` |
| 客户反馈 | 客户反馈、客户认可、客户要求、客户原话、满意/不满意、接受/拒绝 | `customer_feedback` |
| 竞品 | 竞品、进口、品牌A、对比、优于、差距、报价 | `competitor` |
| 下一步 | 下一步、下周、明天、安排、计划、跟进、推动、确认、补做、负责 | `next_action` |
| 订单样品 | 订单、SO-、TS-、发货、补寄、合同、报价、采购、送样、样品、送了、寄了 | `order_status` |
| 决策链 | 决策、采购、总监、主任、PI、课题组、负责人、关键人 | `decision_chain` |
| 风险 | 风险、卡点、暂停、停滞、预算、延迟、推迟、可能 | `risk_note` |

### 判定约束

- **测试结果**必须有“已发生”信号：`→ / 实测 / 测得 / 达到 / 通过 / 超阈 / 失败`，或“指标 + 为/达到/测得 + 数值”。  
  “Ct 漂移控制在 1.0 以内”是要求，不是结果，不能写入 `last_test_result`。
- **问题卡点**遇到“没问题 / 无问题 / 未见异常”不写入。
- **客户需求**不能因为句子里出现“研发”就命中；必须出现需求/阶段类词。
- 同一句可以命中多个字段，但每个字段只写入与该字段相关的句子/分句。
- 一条活动最多更新 1 次同一字段；同一字段多次出现时，取信息量最高的一句。

---

## 5. 入档规则

1. 系统抽取后先展示“待确认”，不直接覆盖。
2. 销售勾选需要入档的字段；默认全选“有变化”的字段。
3. 入档时：
   - 旧值、旧更新时间、旧来源写入 `field_history`；
   - 新值、本次时间、本次活动 ID 写入项目档案；
   - 未勾选/未提到的字段不动。
4. 同一活动重复提交时，按 `activity_id + field` 幂等，不重复追加历史。
5. 撤销本次：按本次 `history_id` 批量恢复旧值，历史记录保留但标记“已撤销”。
6. 字段无变化时，不生成更新记录；页面显示“保持不变”。

---

## 6. 与现有页面的关系

- **`活动录入.html`**：保留现有活动字段；新增“今日活动（只写发生的事）”与“字段更新预览”，提交活动时一起提交 `raw_text`、`tags`、`field_updates`。
- **`客户拉通大表_demo_v10` 第二层**：把“② 活动描述（按活动类型切换模板）”替换为“今日活动 + 字段更新预览”；不再要求销售重写项目全貌。
- **任务闭环**：活动入档后，需要技术/质量支持的事项仍走“支持任务”，与字段更新分开：字段更新是“档案变化”，任务是“待执行动作”。
- **后端**：新增 `field_history` 集合/表；活动提交接口接收 `raw_text`、`tags`、`field_updates`；入档接口按字段写档案 + 追加历史。

---

## 7. 待确认

1. 字段是否还要增加“商务阶段 / 预算 / 竞品价格 / 合同条款”等独立字段？
2. 测试结果是否要拆成“指标、实测值、判定”三个子字段，便于趋势分析？
3. 客户反馈是否要区分“口头反馈 / 书面反馈 / 客户原话”？
4. 入档是销售确认，还是主管/销售支持复核后入档？
5. 历史保留期限与审计要求（是否需要记录修改人、修改原因）？
