# MCP `key_label_value_list` 字段格式与客诉客户关联

## 格式

MCP 中 `workitem_related_multi_select` 字段在 MQL 中以 `key_label_value_list` 类型返回：

```json
{
  "key": "field_ac5caf",
  "name": "客户",
  "value_type": "key_label_value_list",
  "value": {
    "key_label_value_list": [
      {"key": "4203833184", "label": "湖南国测生物科技有限公司"},
      {"key": "4196185052", "label": "广州诺瓦生物科技有限公司"}
    ]
  }
}
```

与 `select` 字段的 `key_label_value`（单个对象 `{key, label}`）不同，`key_label_value_list` 是**数组**。

## parse_items 处理

```python
if isinstance(v, list) and len(v) > 0:
    if isinstance(v[0], dict) and 'label' in v[0]:
        # 多值关联字段：取第一个 label（或 join 所有 label）
        fields[k] = v[0]['label']
        # 如需全部：', '.join(x['label'] for x in v)
        continue
    if isinstance(v[0], dict) and 'name_cn' in v[0]:
        # 用户列表：取所有 name_cn
        fields[k] = [x.get('name_cn','') for x in v]
        continue
```

## 受影响字段

| 字段 | 所属类型 | 格式 | 用途 |
|------|---------|------|------|
| `field_ac5caf` | 客诉(6669433056a98249604376de) | key_label_value_list | 客诉关联客户 |
| `field_79aa0b` | 客户(65ae1e403c87b152f3365ca6) | key_label_value_list | 客户关联商机 |
| `current_status_operator` | 通用 | user_value_list | 当前负责人(用户列表) |

## 客诉隔离：按客户→部门

客诉不直接归属销售员，而是通过"关联客户 → 客户部门 → 销售员部门"链条匹配：

1. `pull_complaints.py` 拉取 `field_ac5caf` → 输出 `customer` 字段
2. 页面端构建 `custDeptMap`（从 `mcpCustomers` 中 `name → dept` 映射）
3. 客诉过滤：`custDeptMap[complaint.customer]` ∈ `getUserMcpDepts()`